单击列表中某个位置的一个视图和不同位置自动工作的其他视图?

Click on one view in a position in List and other view at different position automatic working?

我在带有基本适配器的列表中使用自定义复选框。
问题是,当我点击一个未选中的复选框时,另一个复选框会自动被取消选中。
假设我在第 0 个位置单击一个复选框,然后另一个第 5 个位置的复选框将自动取消选中。

          public View getView( int position, View convertView, ViewGroup parent) {
    final  ViewHolder  holder = new ViewHolder();
    if (convertView == null) {

        convertView = mInflater.inflate(R.layout.socket_layer, null);
    }
        holder.checkBox = (ImageView) convertView.findViewById(R.id.checkBox_SocketFilter);
        holder.filter_name=(TextView)convertView.findViewById(R.id.filter_name);

        holder.filter_name.setText(rowItems.get(position));
      holder.checkBox.setTag(position);
           holder.onoff.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
         int position = (Integer) v.getTag();
             if(!selectedItems.get(position)){
                 selectedItems.put(position,true);    
                 if(PrefUtils.socketCheck[position].equals(true))
                 {
                         holder.onoff.setImageResource(R.drawable.offf);                         
                     PrefUtils.socketCheck[position]=false;                       
                     selectedItems.delete(position);


                     }
                   else if(PrefUtils.socketCheck[position].equals(false)){
                     holder.onoff.setImageResource(R.drawable.onnn);                  
                     PrefUtils.socketCheck[position]=true;                   
                     selectedItems.delete(position);
                 }
             }else{
             selectedItems.delete(position);
         }
         }
     });
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }

请帮助我。

像这样修改你的代码。

  1. 在设置点击监听之前,在onOff按钮中添加位置作为标签

    holder.onoff.setTag(position);

  2. 并在onClick()

    int position = (Integer) v.getTag();

然后在onClick()中使用这个位置变量进行运算。

我已经使用这段代码取消选中一些 checkbox.You 可以试一试: 我的 XMl 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.sudiproy.checkboxtutorial.MainActivity">

    <CheckBox
        android:id="@+id/ch_android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="android"/>
    <CheckBox
        android:id="@+id/ch_ios"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="iOS"/>
    <CheckBox
        android:id="@+id/ch_windows"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Windows"/>
    <Button
        android:id="@+id/submit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Submit" />
</LinearLayout>

这是我的 Java 文件:

package com.example.sudiproy.checkboxtutorial;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;

public class MainActivity extends AppCompatActivity {
    private CheckBox chAndroid,chiOS,chWindows;
    private Button submit;
    private CheckBox checkBox1;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        chAndroid= (CheckBox) findViewById(R.id.ch_android);
        chiOS= (CheckBox) findViewById(R.id.ch_ios);
        chWindows=(CheckBox) findViewById(R.id.ch_windows);
        submit= (Button) findViewById(R.id.submit);

        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(chAndroid.isChecked()){
                    chWindows.setChecked(false);

                }



            }
        });

    }
}