- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试制作一个带有复选框的 ListView ,我已经尝试了一个代码并且它工作正常但是我在尝试处理复选框状态时遇到了问题。问题出现在这行代码
holder.chkBox.setOnCheckedChangeListener((MyActivity) 上下文);
因为我试过的代码是使用与 MainActivity.java 文件分开的 Adapter.java 文件,但在我的代码中所有都在一个文件中所以我不知道如何在我的代码中使用这一行,我试过这个
holder.chkBox.setOnCheckedChangeListener((this) context);
也是一个错误的说法
使用这行 holder 的原因是当我选中一个复选框并向下滚动其他项目时,选中的复选框会自动取消选中,谁能告诉我如何解决这个问题?
这是我的适配器代码
@Override public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
View itemView = convertView;
if (itemView == null){
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.textView1 = (TextView) itemView.findViewById(R.id.textView1);
holder.check1 = (CheckBox) itemView.findViewById(R.id.check1);
holder.check2 = (CheckBox) itemView.findViewById(R.id.check2);
itemView.setTag(holder);
}
else{
holder = (ViewHolder) itemView.getTag();
}
holder.check1.setTag(position);
final Item item = items.get(position);
holder.textView1.setText(item.getName());
holder.check1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(buttonView.isPressed()){
if (position != ListView.INVALID_POSITION) {
Item p = items.get(position);
p.setSelected(isChecked);
}
}
}
}
);
holder.check2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(buttonView.isPressed()){
if (position != ListView.INVALID_POSITION) {
Item p = items.get(position);
p.setSelected(isChecked);
}
}
}
}
);
holder.check1.setChecked(item.isSelected());
holder.check2.setChecked(item.isSelected());
return itemView;
}
}private static class ViewHolder {
public TextView textView1;
public CheckBox check2,check1;
}}
最佳答案
首先,让您的 Activity 实现OnCheckedChangedListener
接口(interface),这会强制实现以下方法:
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
}
现在将您的 Activity 引用作为 OnCheckedChangeListener 类型的参数传递给您的适配器,并将其命名为监听器:
MyAdapter myadapter = new MyAdapter(context, MyActivity.this,listdata);
然后,在您的适配器类中,为您的复选框设置监听器,例如:
holder.chkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(buttonView.isPressed()){
//Write the logic to determine if the checkbox must be checked or not
}
}
}
);
这里的重点是使用复选框的isPressed()方法。
关于java - 使用 setOnCheckedChangeListener 的复选框持有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189703/
我正在尝试关闭 View 持有者(在编辑文本中搜索后显示的项目列表)。但我找不到合适的功能或方法来做到这一点!有什么帮助吗? 我有一个搜索适配器,我尝试覆盖 onBindViewHolder 并尝试关
我有一个画廊,我想关闭事件的 holder div 并在用户点击它时转到下一个: 问题是,带有文本 1 的 div 持有者没有关闭并转到下一个持有者。我的 JS 有什么问题? $(document).
我在自定义列表适配器中定义了一个 View 持有者 viewHolder.albumArt = (ImageView) convertView.findViewById(R.id.album_art)
我正在使用 viewholder 从动态数组适配器显示。它可以工作,但是当我滚动列表时显示的数据会不规则地变化。我希望我的 ListView 只填充一次,而不是一直填充当我滚动列表时。有什么建议吗?这
我正在通过构建一个应用程序来学习 Kotlin,现在,我正在尝试为我的 RecyclerView 创建一个适配器。但是,我为我的 ViewGroup 选择的名称标记为 Unresolved Refer
我有一些用作 ListView 项目的复合组件。为了提高性能,我使用 View 持有者来渲染我的 ListView 项目,但由于每个项目内部都有一个复合组件,它仍然很慢,并且渲染每个复合组件每次都需要
所以我有 ViewHolders title 和 description,单击它们将执行完全相同的操作。 setOnClickListener 方法在此方法内定义: @Override public
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 4 年前。 package com.exam
我在DataListAdapter中使用了多个viewholder。每个支架都有一个适配器。 我的适配器: public class DataListAdapter extends BaseAdapt
您可以找到大量如何使用 JWT 承载身份验证通过 Azure AD 保护 ASP.Net 应用程序的示例。只需在启动中添加一些有关 AAD 的信息即可,例如: public void Configur
我正在尝试使用 SPA UI 和 Web API 构建一个应用程序,该应用程序使用 Jwt Bearer token 进行访问控制。我可以对用户进行身份验证并将不记名 token 发送到网络请求,但是
TL,DR:我怎样才能强制回收器 View 再次调用 onBindViewHolder 方法,至少对于可见项目? 调用notifyDataSetChanged()会使列表滞后几毫秒,有没有更好的办法?
有没有办法恢复滑动操作并将 View 持有者恢复到其初始位置在滑动完成并且在 ItemTouchHelper 上调用 onSwiped .Callback 实例?我得到了 RecyclerView、I
我想在显示数据时更新 RecyclerView,在我的例子中,我显示带有或不带标签的图像。 默认情况下,我在创建 View 持有者时设置标签的可见性,这很好,但我希望用户在显示 RecyclerVie
我想检查来自服务器的数据是否为空。如果不为 null,则在我的例子中填充回收器 View 项是 CardView,如果它为 null,则根本不显示 CardView。 在我的回收站 View 适配器中
我的应用程序中有一系列以前称为 listView 的东西,现在是 RecyclerView。我很好奇提高模块化和减少我应用程序这一部分重复的最有效方法。 例如,我有 GroupMemberFragme
i have create custom list view using base adapter to dynamic row content.row content are created pro
我有一个 WebAPI 2 项目,它使用由 IdentityServer3 token 提供商颁发的 token 。在我的 Startup.cs 文件中,我实现了 IdentityServerBear
我正在制作一个应用程序,我在其中从 url 接收一些 JSON 数据,如所示 Image .基本上每个日期数组中都有 5 个对象,我正在使用这段代码从每个日期数组中获取 session 值和 sess
我知道,如果我在 Activity 或 Fragment 中订阅一个可观察对象,我应该将它绑定(bind)到它们各自的生命周期,使用 rxlifecycle-components or rxlifec
我是一名优秀的程序员,十分优秀!