实例化 RecyclerView 的通用适配器

如何解决实例化 RecyclerView 的通用适配器

我是 recyclerview 的新手。我按照@SebastienRieu 的回答,即This link,为不同的属性创建了通用适配器。问题是我想实例化适配器并将其设置为我的回收站视图。我该怎么做?

这里,第二个参数是上下文。应该用什么替换第一个参数?

GenericModelAdapter adapter= new GenericModelAdapter(??,this)
recyclerView.setAdapter(adapter);

感谢任何帮助。

我的 PostModelClass:


public class PostsModelClass {
    int userId;
    int id;
    String title;

    @SerializedName("body")
    String textBody;

    public int getUserId() {
        return userId;
    }

    public int getId() {
        return id;
    }

    public String getTitle() {
        return title;
    }

    public String getTextBody() {
        return textBody;
    }
}

同样,这是我的 CommentsModel 类:


public class CommentsModelClass {
    String postId;
    String id;
    String name;
    String email;

    @SerializedName("body")
    String textBody;

    public String getPostId() {
        return postId;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public String getTextBody() {
        return textBody;
    }

这是我的适配器:

    public class GenericModelAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    
        private Context mContext;
        private static final int TYPE_POSTS = 10;
        private static final int TYPE_COMMENTS = 11;
        private static final int TYPE_PHOTOS = 12;
        private static final int TYPE_USERS = 13;
        private List<GenericViewModel> mItems;
    
    
        public GenericModelAdapter(List<GenericViewModel> items,Context context) {
            this.mItems = items;
            this.mContext = context;
        }
    
        @Override
        public int getItemViewType(int position) {
            GenericViewModel genericItems = mItems.get(position);
            if (genericItems.isPostsModel()) {
                return TYPE_POSTS;
            } else if (genericItems.isCommentsModel()) {
                return TYPE_COMMENTS;
            } else if (genericItems.isPhotosModel()) {
                return TYPE_PHOTOS;
            } else {
                return TYPE_USERS;
            }
        }
    
        public static class PostViewHolder extends RecyclerView.ViewHolder {
    
            TextView textViewResult;
    
            PostViewHolder(@NonNull View itemView) {
                super(itemView);
                textViewResult = itemView.findViewById(R.id.textViewResult);
            }
        }
    
        public static class CommentsViewHolder extends RecyclerView.ViewHolder {
    
            TextView textViewResult;
    
            CommentsViewHolder(@NonNull View itemView) {
                super(itemView);
                textViewResult = itemView.findViewById(R.id.textViewResult);
            }
        }
    
        public static class PhotosViewHolder extends RecyclerView.ViewHolder {
    
            TextView textViewResult;
    
            PhotosViewHolder(@NonNull View itemView) {
                super(itemView);
                textViewResult = itemView.findViewById(R.id.textViewResult);
            }
        }
    
        public static class UsersViewHolder extends RecyclerView.ViewHolder {
    
            TextView textViewResult;
    
            UsersViewHolder(@NonNull View itemView) {
                super(itemView);
                textViewResult = itemView.findViewById(R.id.textViewResult);
            }
        }
    
        @NonNull
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
            LayoutInflater inflater = LayoutInflater.from(mContext);
            if (viewType == TYPE_POSTS) {
                View rootView = inflater.inflate(R.layout.single_item,parent,false);
                return new PostViewHolder(rootView);
            } else if (viewType == TYPE_COMMENTS) {
                View rootView = inflater.inflate(R.layout.single_item,false);
                return new CommentsViewHolder(rootView);
            } else if (viewType == TYPE_PHOTOS) {
                View rootView = inflater.inflate(R.layout.single_item,false);
                return new PhotosViewHolder(rootView);
            } else {
                View rootView = inflater.inflate(R.layout.single_item,false);
                return new UsersViewHolder(rootView);
            }
        }
    
        @Override
        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder,int position) {
    
            GenericViewModel genericViewModel = mItems.get(position);
            if (genericViewModel.isPostsModel()) {
                onBindPost(holder,genericViewModel.getPostsModelClass());
            } else if (genericViewModel.isCommentsModel()) {
                //onBindComments(holder,genericViewModel.getCommentsModelClass());
            } else if (genericViewModel.isPhotosModel()) {
                //onBindPhotos(holder,genericViewModel.getPhotosModelClass());
            } else if (genericViewModel.isUsersModel()) {
                //onBindUsers(holder,genericViewModel.getUsersModelClass());
            }
        }
    
        private void onBindPost(RecyclerView.ViewHolder holder,PostsModelClass postsModelClass) {
    
            String content = "User ID: " + postsModelClass.getUserId() +
                    "\nID: " + postsModelClass.getId() +
                    "\nTitle: " + postsModelClass.getTitle() +
                    "\nBody: " + postsModelClass.getTextBody();
    
            ((PostViewHolder) holder).textViewResult.setText(content);
        }
    
    
        @Override
        public int getItemCount() {
            return mItems.size();
        }
    }

最后,我的 GenericViewModel:

    public class GenericViewModel {
    
        private PostsModelClass mPostsModelClass;
        private CommentsModelClass mCommentsModelClass;
        private PhotosModelClass mPhotosModelClass;
        private UsersModelClass mUsersModelClass;
    
        private GenericViewModel(PostsModelClass postsModelClass,CommentsModelClass commentsModelClass,PhotosModelClass photosModelClass,UsersModelClass usersModelClass) {
            this.mPostsModelClass = postsModelClass;
            this.mCommentsModelClass = commentsModelClass;
            this.mPhotosModelClass = photosModelClass;
            this.mUsersModelClass = usersModelClass;
        }
    
        public boolean isPostsModel() {
            return mPostsModelClass != null;
        }
    
        public boolean isCommentsModel() {
            return mCommentsModelClass != null;
        }
    
        public boolean isPhotosModel() {
            return mPhotosModelClass != null;
        }
    
        public boolean isUsersModel() {
            return mUsersModelClass != null;
        }
    
    
        public static GenericViewModel getPostsInstance(PostsModelClass modelClass) {
            return new GenericViewModel(modelClass,null,null);
        }
    
        public static GenericViewModel getCommentsInstance(CommentsModelClass modelClass) {
            return new GenericViewModel(null,modelClass,null);
        }
    
        public static GenericViewModel getPhotosInstance(PhotosModelClass modelClass) {
            return new GenericViewModel(null,null);
        }
    
        public static GenericViewModel getUsersInstance(UsersModelClass modelClass) {
            return new GenericViewModel(null,modelClass);
        }
    
        public PostsModelClass getPostsModelClass() {
            return mPostsModelClass;
        }
    
        public CommentsModelClass getCommentsModelClass() {
            return mCommentsModelClass;
        }
    
        public PhotosModelClass getPhotosModelClass() {
            return mPhotosModelClass;
        }
    
        public UsersModelClass getUsersModelClass() {
            return mUsersModelClass;
        }
    
    }

是的,我没有分享帖子和用户的模型类。它们类似于这些模型类,我稍后会实现它们。

这是我面临的错误:

Arguments Error

解决方法

根据您在问题中提供的参考,您需要一个包含所有不同属性的模型,例如 {{3}} 中的 EventViewModel,并根据 viewType 填充列表。>

ArrayList<EventViewModel> eventList = "YOUR LIST"
GenericModelAdapter adapter= new GenericModelAdapter(eventList,this)
,

必须是不同集合属性的ArrayList:

GenericModelAdapter adapter= new GenericModelAdapter(ArrayList<YourModel> eventList,this)

您的模型:

public class YourModel() {

  private Property1 mProperty1;
  private Property2 mProperty2;

  private YourModel(Property1 property1,Property2 property2) {
    this.mProperty1 = property1;
    this.mProperty2 = property2;
  }

  public boolean isProperty1() {
    return mProperty1 != null
  }
  public boolean isProperty2() {
    return mProperty2 != null
  }

  public static YourModel getProperty1Instance(Property1 property1) {
    return new YourModel(property1,null);
  }
  public static EventViewModel getProperty2Instance(Property1 property2) {
    return new YourModel(null,property2);
  }

  public Property1 getProperty1() {
    return mProperty1;
  }
  public Property2 getProperty2() {
    return mProperty2;
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res