這將是理論上的問題。在ViewHolder中綁定
正如我們每個人在應用的許多部分使用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);
}
}
現在,我們可以添加綁定方法:
public void bind(App app) {
nameText.setText(app.getName());
}
是否良好格局?
另一種解決方案是使用ViewModel。因爲我們在RecyclerView中有不同的項目,所以我們的適配器可以包含每個ViewModel基類的類列表。
所以基本類:
class RecyclerViewItem {}
現在類是視圖模型爲App。
class AppRecyclerViewItem extends RecyclerViewItem {
App app;
...
}
和我們的適配器只是有RecyclerViewItems的名單:
class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
List<RecyclerViewItem> items;
...
}
所以用這個方法(我的意思是使用視圖模型)是它更好地在ViewHolder添加綁定方法,或視圖模型?
我覺得第一種方法很好,尤其是因爲在recyclerview onBindViewHolder w e調用在視圖中綁定,所以適配器不會獲得很多行。但我喜歡你提出的想法,我會深入研究它。 – ThirdMartian
你在工作中使用這種方法嗎?你能分享你的經驗嗎? – ThirdMartian