- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何更有效地重用一些代码来显示一个适合 getView()[BaseAdapter]、onBindView() [RecyclerView] 或 onCreateView() [Fragment] 的 View 填充 View ?
Custom RecyclerView adapter which populates a whole list of cardViews
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int i) {
MyThing thing = things.get(i);
/* Repeatable Code */
if (thing.getIcon() == 0) {
viewHolder.thingIcon.setImageResource(0);
} else {
viewHolder.thingIcon.setImageResource(ThingIconSet
.getIconResId(thing.getIcon()));
}
etc..etc..etc
现在我还想以完全相同的方式填充此适配器外部的单个 cardView,而不维护此布局的两个副本,您建议我怎么做?
SingleItemFragment displaying a single item from the adapter or anywhere else
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflating the root view
View rootView = inflater.inflate(R.layout.single_cardview_layout,
container, false);
/* Repeated Code */
if (thing.getIcon() == 0) {
viewHolder.thingIcon.setImageResource(0);
} else {
viewHolder.thingIcon.setImageResource(ThingIconSet
.getIconResId(thing.getIcon()));
}
谢谢
最佳答案
我在 library 中遇到过类似的问题我写。解决方案是将 View 创建和 View 绑定(bind)与 Adapter
分离,并将它放在每个 View /元素/RecyclerView-item 的单个类中。
所以我实现了一个通用的 adapter它采用任何实现 interface
的类(我称之为 IItem )。此接口(interface)定义了为 RecyclerView
创建 View
所需的方法,定义了类型并处理所有内容。基本上以下是最重要的:
int getType();
int getLayoutRes();
View generateView(Context ctx);
View generateView(Context ctx, ViewGroup parent);
VH getViewHolder(ViewGroup parent);
void bindView(VH holder);
适配器能够获取项目的任何实现,并将它们可视化。 item
的伟大之处在于,您甚至可以通过 generateView
方法在没有 RecyclerView
的情况下使用这些项目。
为了使其更加灵活和易于实现,我添加了一个 AbstractItem
你可以在这里看到整个实现:https://github.com/mikepenz/FastAdapter除了 item
概念之外,它还提供了许多在带有 RecyclerView
的项目中最常需要的功能。大多数事情都非常通用,以提供最大可能的灵 active 。
实现应该让您大致了解如何实现您的要求(或者您可以使用该库)。你会需要:- 你的“元素”的界面- 能够处理这些“项目”的适配器- 一个“项目”实现,它提供了 RecyclerView
Adapter
关于android - 如何在不重复的情况下在适配器外部使用相同的 getView/onBindView 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28734314/
我是一名优秀的程序员,十分优秀!