Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android.support.v7.widget.RecyclerView.ViewHolder_Android_Android Adapter - Fatal编程技术网

android.support.v7.widget.RecyclerView.ViewHolder

android.support.v7.widget.RecyclerView.ViewHolder,android,android-adapter,Android,Android Adapter,当在适配器中使用android.support.v7.widget.RecyclerView.ViewHolder时,是否需要像前面一样进行视图标记。 或者库是否在后端自动执行此操作?您不需要view.setTag(viewHolder),只需在onBindViewHolder(viewHolder,int位置)中绑定数据即可。 PS:您应该编辑问题的标题,以详细描述您的问题。如果您还在适配器中扩展RecyclerView.Adapter,则无需再使用ViewHolder标记视图。Recycle

当在适配器中使用android.support.v7.widget.RecyclerView.ViewHolder时,是否需要像前面一样进行视图标记。 或者库是否在后端自动执行此操作?

您不需要view.setTag(viewHolder),只需在onBindViewHolder(viewHolder,int位置)中绑定数据即可。
PS:您应该编辑问题的标题,以详细描述您的问题。

如果您还在适配器中扩展
RecyclerView.Adapter
,则无需再使用ViewHolder标记视图。RecyclerView适配器要求您实现一些方法,这些方法指导您创建和绑定视图保持架

  • onCreateViewHolder(ViewGroup ViewGroup,int i)
    这是膨胀视图并创建ViewHolder的地方-RecyclerView.ViewHolder的构造函数要求您传入视图
  • onBindViewHolder(ViewHolder,int i)
    执行将数据绑定到holder所需的所有操作
  • getItemCount()
    返回回收视图中的项目数
适配器的外观应如下所示:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    ...
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        // TODO: inflate your view and create viewholder, most likely looks like this though
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(
            R.layout.recycler_view_item,
            viewGroup,
            false);

        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(MyViewHolder viewHolder, int i) {
        // TODO: all your bind operations
    }

    @Override
    public int getItemCount() {
        // TODO: return total item count of your views
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {
        // TODO: whatever views you need to bind
        public TextView mTextView;
        public ImageView mImageView;

        public MyViewHolder(View v) {
            super(v); // done this way instead of view tagging
            mTextView = (TextView) v.findViewById(R.id.textview);
            mImageView = (ImageView) v.findViewById(R.id.imageview);
        }
    }
}
公共类MyAdapter扩展了RecyclerView.Adapter{ ... @凌驾 公共MyViewHolder onCreateViewHolder(视图组视图组,int i){ //TODO:膨胀视图并创建viewholder,但很可能是这样 视图v=LayoutInflater.from(viewGroup.getContext())。充气( R.layout.recycler\u视图\u项目, 查看组, 假); MyViewHolder vh=新的MyViewHolder(v); 返回vh; } @凌驾 BindViewHolder上的公共无效(MyViewHolder viewHolder,int i){ //TODO:所有绑定操作 } @凌驾 public int getItemCount(){ //TODO:返回视图的项目总数 } 公共静态类MyViewHolder扩展了RecyclerView.ViewHolder{ //TODO:需要绑定的任何视图 公共文本视图mTextView; 公共图像视图mImageView; 公共MyViewHolder(视图v){ super(v);//这样做,而不是视图标记 mTextView=(TextView)v.findviewbyd(R.id.TextView); mImageView=(ImageView)v.findviewbyd(R.id.ImageView); } } }
onBindViewHolder
将执行绑定,因此无需标记无法执行此操作!您将得到一个错误:
viewHolder是抽象的;无法实例化
您可能正在实例化
RecyclerView.ViewHolder
,而不是在内部静态类中声明的自定义ViewHolder。我将编辑示例以使其更清晰。