【问题标题】:Did i need to share an item from onBindViewHolder() to ViewHolder?我是否需要将 onBindViewHolder() 中的项目共享到 ViewHolder?
【发布时间】:2021-01-06 08:17:12
【问题描述】:

我是 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
    }

}

最好的方法是什么?

【问题讨论】:

    标签: android android-fragments android-recyclerview android-listview android-viewholder


    【解决方案1】:

    我不知道你在说什么,但据我了解,你的视图持有者可以包含所有 UI 和方法和逻辑,但是我更喜欢第三种方法,因为它比其他方法更清晰 2 .

    话虽如此,请看HEREAdaMc331 解释了这些方法的工作原理以及您应该如何使用它们。

    【讨论】:

    • 感谢您的帮助!完全符合我的预期,甚至更多。
    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多