我需要从onBindViewHolder到ViewHolder共享一个项目吗?

问题描述

我是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解释了这些方法如何工作以及如何使用它们。