2015-08-13 4 views
0

Я знаю, что были сообщения о том, как сохранять состояния радиогрупп при изменении активности через 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; 
    } 
+0

Автомобиль имеет несколько вариантов радиосвязи, не так ли? –

ответ

0

Если вы хотите сохранить все состояния, сохраните их в базе данных SQLite. Храните каждое контролируемое/непроверенное состояние как значение 0/1 или наоборот.

Пример: Назначьте уникальный идентификатор каждому элементу списка, содержащему несколько радиогрупп. Назначьте уникальный идентификатор в этом элементе списка для каждого радиообмена. В базе данных есть три поля,

1. unique listview item id 
2. unique radiobutton id 
3. state (0/1) 

Если вы просто хотите сохранить состояние через изменения ориентации и не обеспокоены сохраняющиеся все государства, то другой способ заключается в использовании удерживаемого фрагмента. Этот фрагмент будет иметь подходящую структуру данных (я оставлю это до вас, чтобы решить, какой из них использовать), который содержит все ваши радиообъектные состояния и сохраняется во всех изменениях ориентации.

+0

Есть ли у вас код, который вы можете поделиться относительно вышеперечисленного? – neo

Смежные вопросы