Я создаю приложение для Android, и я хотел бы активировать только один переключатель в режиме on-mode в любое время в ListView. Я использую метод onCheckedChanged. Как я могу это сделать?Как я могу включить один переключатель в ListView многих переключателей?
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);
}
ли вы поддерживать массив всех этих коммутаторов в любом месте? –
Можете ли вы описать, что ваша стратегия прямо сейчас, и конкретно, что она не делает, что вы хотели бы работать? Возможно, опубликуйте весь файл, где живет этот код. –
обновил мой пост, спасибо за ваше время – BillUser88