Я знаю, что были сообщения о том, как сохранять состояния радиогрупп при изменении активности через SharePrefs. Моя проблема несколько отличается. У меня есть listview, который генерирует несколько радиогрупп динамически. Как я могу убедиться, что когда пользователь покидает текущую активность, которую сохраняет каждая из радиогрупп списка? Ниже приведен мой текущий класс адаптера, показывающий мой метод getView.Сохранение состояния радиогруппы при изменении активности
@Override
public View getView(final int position, final View convertView, ViewGroup parent) {
View v = convertView;
final ViewHolder holder;
if(v == null) {
v = mInflater.inflate(R.layout.list_item_car, parent, false);
holder = new ViewHolder();
holder.txtCarName = (TextView) v.findViewById(R.id.txt_car_name);
holder.radioGroup = (RadioGroup) v.findViewById(R.id.scale);
holder.radioGroup.setTag(position);
v.setTag(holder);
}
else {
holder = (ViewHolder) v.getTag();
}
// fill row data
final Car currentItem = getItem(position);
if(currentItem != null) {
holder.txtCarName.setText(currentItem.getCar());
holder.radioGroup.setTag(currentItem.getAnswer());
}
holder.radioGroup.setOnCheckedChangeListener(null);
holder.radioGroup.clearCheck();
if(checked.indexOfKey(position)>-1){
holder.radioGroup.check(checked.get(position));
}else{
holder.radioGroup.clearCheck();
}
holder.radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
String Answer = null;
if(checkedId>-1){
checked.put(position, checkedId);
switch (checkedId) {
case R.id.a1:
Answer = "r1";
break;
case R.id.a2:
Answer = "r2";
break;
case R.id.a3:
Answer = "r3";
break;
case R.id.a4:
Answer = "r4";
break;
}
db.addListItem(“testCar", Answer, getCurrentTimeStamp()); //<----null object reference happening here
}else{
if(checked.indexOfKey(position)>-1)
checked.removeAt(checked.indexOfKey(position));
}
}
});
return v;
}
Автомобиль имеет несколько вариантов радиосвязи, не так ли? –