java - 如何使用 RecyclerView 在编辑模式下显示选中的项目?
问题描述
我无法在我的应用程序中获取业务逻辑之一。谁能帮帮我,我是android开发的新手。
顺便说一句,我正在使用 android recyclerview 来显示项目列表,并且我需要显示已检查的项目已标记为签入 recyclerview。
我正在从服务器获取检查项目:InterestsList:["Antiques-Collecting","Arts-Crafts","Boating"]
这些项目需要与我的 recyclerView ArrayList 或 Items 进行比较,如果这些项目在 recyclerview 中可用,我需要显示为选中的项目。
我该如何为此编写简单的逻辑?
具有Recycler项目列表数据的字符串ArrayList,InterestsList是已检查项目列表数据。
这是我的适配器类:
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.tvInterestName.setText(interests.get(position).getInterest().toString());
List<String> strings = new ArrayList<>(interests.size());
for (Interest object : interests) {
strings.add(Objects.toString(object, null));
}
interestList = model.getInterests();
System.out.println("LISTTTTTT @@@"+strings.toString());
System.out.println("LISTTTTTT @@@"+interestList.size());
for (int i = 0; i < strings.size(); i++) {
for (int j = 0; j < interestList.size(); j++) {
if(strings.get(i).equalsIgnoreCase(interestList.get(j))) {
holder.checkBox.setChecked(true);
}
else
holder.checkBox.setChecked(false);
}
}
//in some cases, it will prevent unwanted situations
holder.checkBox.setOnCheckedChangeListener(null);
//if true, your checkbox will be selected, else unselected
holder.checkBox.setChecked(interests.get(position).isSelected());
holder.cell.setOnClickListener(v ->
{
holder.checkBox.performClick();
});
if (interests.get(position).isSelected()) {
holder.checkBox.setChecked(true);
} else {
holder.checkBox.setChecked(false);
}
holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) ->
{
guestListener.OnMultipleGuestListener(position, isChecked);
});
}
我的活动类中使用的多个选择项接口侦听器:
@Override
public void OnMultipleGuestListener(int position, boolean isChecked) {
interestList.get(position).setSelected(isChecked);
interestsAdapter.notifyDataSetChanged();
}
解决方案
由于您还在 usr 单击其他区域时捕获事件,因此我们只关注该区域并忽略单击复选框。
在 xml 文件中,将复选框设置为 clickable=false
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
String interest = interests.get(position).getInterest().toString();
holder.tvInterestName.setText(interest);
interestList = model.getInterests(); //assuming it's list of string from your code
//do not assign list from model here, instead do it on separate function
//of adapter because we do not need to resign same list every time to
//interestList from some other model which have nothing to do with each
//item. as this method will be called for each item
final boolean isCheck = interestList.contain(interest);
holder.checkBox.setChecked(isCheck);
holder.cell.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChecked = !holder.checkBox.isChecked();
holder.checkBox.setChecked(isChecked );
guestListener.OnMultipleGuestListener(position, isChecked);
}
});
}
推荐阅读
- flutter - 谷歌地图实现与颤振 2 和 nullsafety
- reactjs - CSSTransition 不适用于条纹元素 React
- php - ZipArchive 已安装,但当我运行脚本时不起作用
- flutter - 版本解决失败,但仅适用于某些人
- python - blit:不能显示多个精灵
- python - 我在 discord.py 的 on_message 事件中收到 TypeError
- python - 我正在尝试使用烧瓶中的 imgkit 将 html 转换为图像
- icons - nuxt + mdi/js 摇树不工作。怎么修?
- python - 如何用 xlwt 从第二行开始写?
- python - 处理大型 xml 文件。只有根树子属性是相关的