java - 重用 RecyclerView 适配器

标签 java android listview android-recyclerview adapter

我在这里有一个非常小的问题,在我使用的回收 View 适配器类中 List<FeaturedTags>并且工作正常。

现在我们新引入了名为“FeaturedLangTags”的类,FeaturedTags 之间的唯一区别& FeaturedLangTags只是 Lang 的加法 field 。但是无论如何我们都不会使用这个 Lang 字段来显示在屏幕上。

回收 View 的输出看起来与现有的 FeaturedTags 完全相似适配器。在这里我想知道如何重新使用现有的适配器类来显示 List<FeaturedLangTags>项目?

一个简单的方法是复制现有的适配器并传递 FeaturedLangTags列表,但是这里有很多代码被重复了。我想知道如何调整现有类(class)?

最佳答案

创建通用适配器 List<T>这两种情况都可以使用。

public abstract class GenericAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private Context context;
    private ArrayList<T> items;

    public abstract RecyclerView.ViewHolder setViewHolder(ViewGroup parent);

    public abstract void onBindData(RecyclerView.ViewHolder holder, T val);

    public GenericAdapter(Context context, ArrayList<T> items){
        this.context = context;
        this.items = items;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        RecyclerView.ViewHolder holder = setViewHolder(parent);
        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        onBindData(holder,items.get(position));
    }

    @Override
    public int getItemCount() {
        return items.size();
    }

    public void addItems( ArrayList<T> savedCardItemz){
        items = savedCardItemz;
        this.notifyDataSetChanged();
    }

    public T getItem(int position){
        return items.get(position);
    }
}


adapter = new GenericAdapter<DataModel>(context,modelList) {
        @Override
        public RecyclerView.ViewHolder setViewHolder(ViewGroup parent) {
            final View view =            LayoutInflater.from(context).inflate(R.layout.item_view_holder, parent, false);
            ItemViewHolder viewHolder = new ItemViewHolder(context, view);
            return viewHolder;
        }

        @Override
        public void onBindData(RecyclerView.ViewHolder holder1, DataModel val) {
                DataModel userModel = val;

                ItemViewHolder holder = (ItemViewHolder)holder1;
                holder.name.setText(userModel.getName());
                holder.fatherName.setText(userModel.getFatherName());
        }
    };
    mRecyclerView.setAdapter(adapter);

关于java - 重用 RecyclerView 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48036595/

相关文章:

java - 在 ListView 中选择项目时出现问题 - JavaFX

安卓 : How to add a listview inside a scrollview. ?

java - ServerSocket可以在从客户端读取之前先写入客户端吗?

java - 单击按钮时从自定义适配器刷新 ListView

android - 启动android模拟器的最快方法

java - 我的应用程序在三星 Galaxy Note 4 的 Google Play 商店中不可见

android - 无法导入 com.google。 .... 为什么?

flutter - 在 ListTile 中更改 CircleAvatar 大小

java - 如何让我在EditText中输入的数据插入到数据库中并显示在recyclerview上而不需要像ajax那样刷新?

java - 在 Cygwin 上从自解压 bin 安装 JDK