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

时间:2015-12-11 11:48:52

标签: android android-listview onitemclicklistener

我在使用基本适配器的列表中使用自定义复选框 问题是,当我点击复选框以取消选中时,另一个复选框自动取消选中 假设我单击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();
    }

请帮帮我。

2 个答案:

答案 0 :(得分:5)

修改你的代码就像这样。

  1. 在设置点击监听器之前,在onOff按钮

    中添加位置作为标签

    holder.onoff.setTag(position);

  2. 并在onClick()

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

  3. 然后在onClick()内使用此位置变量进行操作。

答案 1 :(得分:1)

我在取消选中某个复选框时使用了此代码。您可以尝试一下: 我的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);

                }



            }
        });

    }
}