【问题标题】:How to use the same getView / onBindView code outside of an adapter without repeating it如何在适配器外部使用相同的 getView / onBindView 代码而不重复它
【发布时间】:2015-02-26 04:10:23
【问题描述】:

我想知道如何更有效地重用一些代码来显示一个可以适应 getView()[BaseAdapter]、onBindView() [RecyclerView] 或 onCreateView() [Fragment] 的视图填充视图?

自定义 RecyclerView 适配器,填充整个 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 显示来自适配器或其他任何地方的单个

@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()));
    }

谢谢

【问题讨论】:

    标签: android android-fragments adapter android-recyclerview


    【解决方案1】:

    我在我写的library 中遇到过类似的问题。解决方案是将视图创建和视图绑定与Adapter 分离,并将其放在每个视图/元素/ RecyclerView-item 的单个类中。

    所以我实现了一个通用adapter,它接受任何实现interface 的类(我称之为IItem)。该接口定义了创建View 所需的方法,RecyclerView 定义了类型并处理了所有内容。基本上以下是最重要的:

    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 概念之外,它还提供了RecyclerViews 项目中最常用的许多功能。大多数东西都是非常通用的,以实现尽可能高的灵活性。

    实现应该让您大致了解如何实现您的需求(或者您可以使用该库)。 你会需要: - 您的“项目”的界面 - 一个能够处理这些“项目”的适配器 - 一个“项目”实现,它提供了RecyclerView Adapter 所需的方法

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多