我正在构建一个 Android 应用程序,我希望在 ListView 中的任何时候都只激活一个处于开启模式的开关。我正在使用 onCheckedChanged 方法。我怎样才能做到这一点?
public ListAdapter2(Context context, ArrayList<String> resource, Boolean[] checkedStatus) {
super(context,R.layout.toggle_button_row,resource);
// TODO Auto-generated constructor stub
this.context = context;
goalList=new ArrayList<String>();
this.goalList =resource;
this.checkedStatus=checkedStatus;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
convertView = inflater.inflate(R.layout.toggle_button_row, parent, false);
v1=convertView;
TextView name = (TextView) v1.findViewById(R.id.textview1);
name.setText(goalList.get(position).toString());
sw= (Switch) v1.findViewById(R.id.switch1);
sw.setTag(position);
sw.setOnCheckedChangeListener(ListAdapter2.this);
sw.setChecked(checkedStatus[position]);
return convertView;
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Integer index = (Integer) buttonView.getTag();
checkedStatus[index] = isChecked;
String key = index.toString();
//save the data for the status
SharedPreferences sharedPreferences = getContext().getSharedPreferences("status", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(key, isChecked);
editor.putBoolean("MyGoal", isChecked);
editor.putString("MyGoal1", goalList.get(index).toString().trim());
editor.apply();
}
我添加了更多我的代码。我想要做的是,在这个特定的 ListView 中,当我打开时,例如第一个我想保存它的状态,我已经通过使用 sharedPreferences 完成了这个,但我不想打开多个开关。因此,当我激活第二个时,我希望第一个关闭。这同样适用于所有这些,当一个处于活动状态时,其他的处于关闭状态。
public void display(View v) {
//The database is open!
ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
database = dbOpenHelper.openDataBase();
//initialize
goalList = new ArrayList<String>();
//put cursor
Cursor cursor = database.rawQuery("select * from tbl_WG", null);
cursor.moveToFirst();
if(!cursor.isAfterLast()) {
do {
String name=cursor.getString(cursor.getColumnIndex("name"));
Integer steps=Integer.parseInt(cursor.getString(1));
goalList.add("Name: "+name+" || Steps: "+steps);
} while (cursor.moveToNext());
}
cursor.close();
//size of the status list;
status= new boolean[goalList.size()];
//check state
SharedPreferences sharedPreferences = getSharedPreferences("status", MODE_PRIVATE);
checkedStatus = new Boolean[goalList.size()];
for ( int index = 0; index < checkedStatus.length; index++)
checkedStatus[index] = sharedPreferences.getBoolean(Integer.toString(index), false);
//create an ArrayAdaptar from the String Array
ListAdapter2 adapter = new ListAdapter2(this, goalList, checkedStatus);
// Assign adapter to ListView
mainListView.setAdapter(adapter);
}