java - 使用 setOnCheckedChangeListener 的复选框持有者

标签 java android android-layout listview android-checkbox

我正在尝试制作一个带有复选框的 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/

相关文章:

java - 在 Java 中将图像的元数据转换为 JSON

java - 类型 "class *"未被增强的JPA异常

java - Eclipse 找不到主要方法

c# - 在 Xamarin.Forms Droid 的 MSAL 中找不到 AuthenticationContinuationHelper 类

Android:自定义微调器布局

android - 两个布局动画时的单击监听器行为

java - 如何使用 JTable 设置 JScrollPane 以自动调整内容

ANDROID:是否可以通过应用程序(.apk)替换 Android 操作系统的库文件?

java - 如何只下载 rss 部分

java - Android ViewPager 未加载