首页 > 解决方案 > 如何根据特定条件在recyclerview中除一行之外的所有行的inActive或禁用onClick?

问题描述

RecyclerView 有几个行项目。现在基于一个条件,我需要使特定行处于活动状态并休息以禁用或模糊。我该怎么做?

标签: androidandroid-recyclerview

解决方案


这可以以不同的方式激活。我已经提到了两种方法。

//Take a class variable inside adapter.
int activeItemIndex = 0; //first item onClick enabled initially or -1 if non selected initially.

现在实现按钮 onClick 逻辑如下:

类型 1:通过在 onClick() 中使用条件

public void onBindViewHolder(....) {

    viewHolder.button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(position == activeItemIndex) {
                //do what you want to code here....
            } //do nothing if position is not activeItemIndex so it will act like disable.
        }
    });
}

类型 2:通过使其他项目的 onClick() 为空。

public void onBindViewHolder(....) {
    if(position == activeItemIndex) {
        viewHolder.button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //do what you want to code here....
            }
        });
    } else {
        viewHolder.button1.setOnClickListener(null);
    }
}

现在接下来您要做的是在代码旁边调用 notifyDataSetChanged() ,您将在其中使用条件来更改activeItemIndex的值。因此,在您的代码中的某处,onBindViewHolder() 中将包含片段,例如:

...
//Updating active onClick item position based on condition
if(condition) {
    activeItemIndex = position;
    notifyDataSetChanged();
}
...

推荐阅读