我在使用基本适配器的列表中使用自定义复选框 问题是,当我点击复选框以取消选中时,另一个复选框自动取消选中 假设我单击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();
}
请帮帮我。
答案 0 :(得分:5)
修改你的代码就像这样。
在设置点击监听器之前,在onOff按钮
中添加位置作为标签 holder.onoff.setTag(position);
并在onClick()
int position = (Integer) v.getTag();
然后在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);
}
}
});
}
}