gpt4 book ai didi

android - 如何在不重复的情况下在适配器外部使用相同的 getView/onBindView 代码

转载 作者:行者123 更新时间:2023-11-29 01:35:08 24 4
gpt4 key购买 nike

我想知道如何更有效地重用一些代码来显示一个适合 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com