使用 RecyclerView 时如何处理与视图交互的 UI 更改?

吉姆

如果我们有一个RecyclerView具有不同类型视图的视图,我们可以根据项目类型扩展我们需要的视图,例如

@Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) {
        View view = null;
        switch (type) {
            case TYPEX:  
               view = LayoutInflater
                    .from(viewGroup.getContext())
                    .inflate(R.layout.typex, viewGroup, false);
                    return new ViewHolderX(view);
            case TYPEY:
                view = LayoutInflater
                    .from(viewGroup.getContext())
                    .inflate(R.layout.typey, viewGroup, false);
                return new ViewHolderY(view);
        }
        return null;
    }

到现在为止还挺好。然后这些视图可以在ViewHolder

问题:
如果TYPEX视图有一个按钮,按下按钮会改变视图中的某些东西,例如背景颜色,这意味着当视图被回收时,对于用户从未按下按钮的其他项目,颜色将不同。
由于它与视图必须从适配器显示的数据的任何条件无关,因此如何解决这个问题?

阿萨杜扎曼博士

您应该将您的属性 [背景颜色]存储在模型中并基于此做出决定。

class Model {

    ...

    private int backgroundColor = 0xFFFFFF;

    public int getBackgroundColor() {
        return backgroundColor;
    }

    public void setBackgroundColor(int backgroundColor) {
        this.backgroundColor = backgroundColor;
    }

    ...

}

处理单击此处并更新背景颜色。

@Override
public void onBindViewHolder(@NonNull final SuggestionHomeAdapter.ViewHolder holder, final int position) {

    final Model model = modelItems.get(position);

    holder.rootView.setBackgroundColor(model.getBackgroundColor());

    holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(model.getBackgroundColor() != 0xFFFF0000){
                model.setBackgroundColor(0xFFFF0000);
                notifyItemChanged(position);
            }
        }
    });
}

它通过位置而不是视图与模型保持一致。所以只有那些被用户点击的受影响的项目。谢谢

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用NSCoding时如何处理字段类型更改

使用 AsyncTask 成功更新 RecyclerView 但活动 / UI 线程中的大小 Arraylist 未更改

如何使用ui-router在angularjs中动态更改视图

如何处理jQuery UI Selectmenu更改事件

如何使用在recyclerview gridlayout中更改的notifydataset

RecyclerView 如何处理不同视图的回收?

RecyclerView项目在更改视图类型时消失

Firebase UI RecyclerView - 处理映射

Recyclerview滚动时更改的项目

RecyclerView在滚动时更改值

在使用Firebase和ChildEventListener时,如何更改方向后如何保留RecyclerView的位置?

如何从右到左更改RecyclerView的顺序?

使用Liquibase时如何处理由自动更新脚本进行的数据库更改?

使用 Python 更改注册表值时如何处理 PermissionError

使用Material-ui和react-router 4单击模态时,如何更改URL(而不是整个视图)?

如何使用自定义方式保存数据RecyclerView时使列表更改动画

Jenkins UI在使用Nginx时不显示配置更改

使用reactjs和Material UI单击按钮时更改内容

使用鼠标上下更改值时的UI Spinner Bug

如何更改kibana的UI

如何从WearableListenerService更改UI?

使用GridLayoutManager和RecyclerView更改列数

使用SortedList和RecyclerView更改排序顺序

如何使用 Material ui 更改所选项目的颜色

如何使用脚本在Unity UI中更改占位符文本?

如何使用 Android 中的 Asynctask 类更改 UI 数据?

如何使用ui滑块更改混音器音量?

范围值更改时如何使用angularJs更新UI?

如何使用MVVM在WPF中更改UI按钮