Nom*_*sta 12 android android-viewholder android-recyclerview
这将是理论问题.
作为每个人,我们在应用程序的许多部分使用RecyclerView.有时,RecyclerView包含不同的项目,不仅包括图像,还包括广告,提示等.这就是为什么我们可以在Adapter中使用getViewType()方法.
但是当我们有很多viewTypes并且在Adapter中绑定它不优雅时会出现问题.所以这就是问题,在ViewHolder中绑定数据是不错的好模式?
假设我们有应用列表.
每个应用程序都有简洁的名称.我们的ViewHolder看起来像这样:
class AppViewHolder extends RecyclerView.ViewHolder {
public TextView nameText;
AppViewHolder(View itemView) {
super(itemView)
nameText = (TextView) itemView.findViewById(R.id.text_name);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以添加bind方法:
public void bind(App app) {
nameText.setText(app.getName());
}
Run Code Online (Sandbox Code Playgroud)
这是好模式吗?
另一种解决方案是使用ViewModel.因为我们在RecyclerView中有不同的项目,所以我们的适配器可以包含类的列表,它是每个ViewModel的基类.
所以基础课是:
class RecyclerViewItem {}
Run Code Online (Sandbox Code Playgroud)
现在是ViewModel for App的类.
class AppRecyclerViewItem extends RecyclerViewItem {
App app;
...
}
Run Code Online (Sandbox Code Playgroud)
和我们的适配器只有RecyclerViewItems列表:
class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
List<RecyclerViewItem> items;
...
}
Run Code Online (Sandbox Code Playgroud)
因此,使用这种方法(我的意思是使用ViewModel),最好在ViewHolder或ViewModel中添加bind方法吗?
我会说你的解决方案都不好.第一个仅适用于在适配器中只出现一次的项目.创建一个填充内部行的方法ViewHolder不是一个好的解决方案,因为不同类型的ViewHolders会增长,你RecyclerView.Adapter会获得越来越多的行.
第二种方法也不好.模型是模型,应该只包含数据而不是应用程序的业务逻辑.
我建议一个保持RecyclerView.Adapter清洁的解决方案,并传递创建ViewHolder和填充数据给代表的逻辑,这将在ie中注册.RecyclerView.Adapter构造函数.这里解释了这种技术
这样,即使通过多种不同的方式注册ViewHolder也不会特别添加样板RecyclerView.Adapter,但是将RecyclerView.Adapter行创建和填充的逻辑委托给那些代理.
但这只是一个建议.
| 归档时间: |
|
| 查看次数: |
7653 次 |
| 最近记录: |