android - 如何根据特定条件在recyclerview中除一行之外的所有行的inActive或禁用onClick?
问题描述
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();
}
...
推荐阅读
- ruby-on-rails - 如何在 Ruby on Rails 中使用回形针制作具有无限图像的模型?
- azure-devops - 我可以在 VSTS 的工件中添加最新的 1 版本吗?
- node.js - 如果计数值返回 1,则继续查询以计数和更新数据
- azure - 使用 azure 事件中心触发函数批量接收事件中心事件的可能性
- ios - 执行人脸识别时出现opencv灯问题
- javascript - 如何使用函数添加 api 键值,可能是语法错误
- php - 如何使用 php artisan serve 设置域名
- java - 在 Spring Boot Rest Controller 中解析 Json 数组初始化单个对象
- c# - MVC Core 将 ViewModel 绑定到模型
- java - 打印网格时Java索引越界异常