问题描述
我是android开发入门的大三学生,我正在寻找Viewholder / onBindViewHolder的最佳实现。
这是android studio在构建片段(列表)时给我们的:
public class MyItemRecyclerViewAdapter extends RecyclerView.Adapter<MyItemRecyclerViewAdapter.ViewHolder> {
//some code
@Override
public void onBindViewHolder(final ViewHolder holder,int position) {
holder.mItem = mValues.get(position);
holder.mIdView.setText(mValues.get(position).id);
holder.mContentView.setText(mValues.get(position).content);
}
public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public final TextView mIdView;
public final TextView mContentView;
public DummyItem mItem;
public ViewHolder(View view) {
super(view);
mView = view;
mIdView = (TextView) view.findViewById(R.id.item_number);
mContentView = (TextView) view.findViewById(R.id.content);
}
//some code
}
}
为什么将项目发送到ViewHolder?为什么在onBindViewHolder中不使用他来更新TextViews? 像这样:
public class MyItemRecyclerViewAdapter extends RecyclerView.Adapter<MyItemRecyclerViewAdapter.ViewHolder> {
//some code
@Override
public void onBindViewHolder(final ViewHolder holder,int position) {
holder.mItem = mValues.get(position);
holder.mIdView.setText(holder.mItem.id);
holder.mContentView.setText(holder.mItem.content);
}
public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public final TextView mIdView;
public final TextView mContentView;
public DummyItem mItem;
public ViewHolder(View view) {
super(view);
mView = view;
mIdView = (TextView) view.findViewById(R.id.item_number);
mContentView = (TextView) view.findViewById(R.id.content);
}
//some code
}
}
最后我现在正在做什么。 没有将项目发送到ViewHolder:
public class MyItemRecyclerViewAdapter extends RecyclerView.Adapter<MyItemRecyclerViewAdapter.ViewHolder> {
//some code
@Override
public void onBindViewHolder(final ViewHolder holder,int position) {
DummyItem mItem = mValues.get(position);
holder.mIdView.setText(mItem.id);
holder.mContentView.setText(mItem.content);
}
public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public final TextView mIdView;
public final TextView mContentView;
public ViewHolder(View view) {
super(view);
mView = view;
mIdView = (TextView) view.findViewById(R.id.item_number);
mContentView = (TextView) view.findViewById(R.id.content);
}
//some code
}
}
什么是最好的方法?
解决方法
我不知道您在说什么,但据我了解,您的视图持有者可以包含所有UI,方法和逻辑,但是我更喜欢第三个方法,因为它比其余方法更清晰2
话虽如此,请看HERE AdaMc331解释了这些方法如何工作以及如何使用它们。