2013-11-18 4 views
0

Я пытаюсь реализовать постоянный контрольный список в приложении Android, который проверяет те же элементы, даже если вы закрываете приложение., что делает постоянный контрольный список

По какой-то причине я не могу его сохранить. Он сбрасывает все, как неконтролируемые, хотя я заявил, что по умолчанию для элемента 3 будет проверяться.

Вот мой код. Я храню массив в sharedprefs, а затем хватаю их, когда это необходимо.

адаптер:

private class MyCustomAdapter extends ArrayAdapter<ListItemClass> { 

    private ArrayList<ListItemClass> listItemList; 

    public MyCustomAdapter(Context context, int textViewResourceId, 
          ArrayList<ListItemClass> itemList) { 
     super(context, textViewResourceId, itemList); 
     this.listItemList = new ArrayList<ListItemClass>(); 
     this.listItemList.addAll(itemList); 
    } 

    private class ViewHolder { 
     CheckBox name; 
     TextView desc; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder = null; 
     //Log.v("ConvertView", String.valueOf(position)); 

     if (convertView == null) { 
      LayoutInflater vi = (LayoutInflater) context.getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 
      convertView = vi.inflate(R.layout.checklist_item, null); 

      holder = new ViewHolder(); 
      holder.desc = (TextView) convertView.findViewById(R.id.code); 
      holder.name = (CheckBox) convertView.findViewById(R.id.taskListCheckBox); 

      holder.name.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        CheckBox cb = (CheckBox) v; 
        ListItemClass item = (ListItemClass) cb.getTag(); 
        Toast.makeText(context, "Toggled: " + cb.getText(), 
          Toast.LENGTH_SHORT).show(); 
        item.setSelected(cb.isChecked()); 
        prefsEditor.putString(item.getCode(), item.getString()).commit(); 
        ArrayList<ListItemClass> itemList = getArray(); 
        listItemList.clear(); 
        listItemList.addAll(itemList); 

       } 
      }); 
      convertView.setTag(holder); 
      holder.name.setTag(listItemList.get(position)); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     ListItemClass listItem = listItemList.get(position); 
     holder.desc.setText(" (" + listItem.getName() + ")"); 
     holder.name.setText(listItem.getCode()); 
     holder.name.setChecked(listItem.isSelected()); 
     holder.name.setTag(listItem); 

     return convertView; 

    } 

} 

ListItemClass:

public class ListItemClass { 
    String name = null; 
    String desc = null; 
    boolean selected = false; 

    public ListItemClass(String name, String desc, boolean selected) { 
     super(); 
     this.name = name; 
     this.desc = desc; 
     this.selected = selected; 
    } 

    public String getCode() { 
     return name; 
    } 
    public void setCode(String code) { 
     this.name = code; 
    } 
    public String getName() { 
     return desc; 
    } 
    public void setName(String name) { 
     this.desc = name; 
    } 
    public String getString() { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(this.getCode() + ","); 
     sb.append(this.getName() + ","); 
     sb.append(String.valueOf(this.isSelected())); 
     return sb.toString(); 
    } 

    public boolean isSelected() { 
     return selected; 
    } 
    public void setSelected(boolean selected) { 
     this.selected = selected; 
    } 
} 

GetArray() (для извлечения из sharedprefs):

private ArrayList<ListItemClass> getArray() { 
     ArrayList<ListItemClass> result = new ArrayList<ListItemClass>(); 

     Map<String, ?> map = prefs.getAll(); 

     if(!map.isEmpty()) { 
      for(Map.Entry<String, ?> entry:map.entrySet()) { 
       String itemValue = entry.getValue().toString(); 
       String key = entry.getKey(); 
       List<String> list = Arrays.asList(itemValue.split(",")); 
       result = addCountry(result, key, list.get(1), Boolean.getBoolean(list.get(2))); 
      } 
     } 
     return result; 
    } 

addCountry():

private ArrayList<ListItemClass> addCountry(ArrayList<ListItemClass> array, String name, String desc, Boolean selected) { 
     ListItemClass country = new ListItemClass(name, desc, selected); 
     prefsEditor.putString(country.getCode(), country.getString()).commit(); 
     array.add(country); 
     return array; 
    } 

EDIT: вот где им назначая мои общие префы:

SharedPreferences prefs = context.getSharedPreferences("taskList", Context.MODE_PRIVATE); 
SharedPreferences.Editor prefsEditor = prefs.edit(); 
+0

где вы сохраняете код состояния? –

+0

Я обновил вопрос –

ответ

0

Сохранить состояния контрольного списка в общих настройках.

http://developer.android.com/reference/android/content/SharedPreferences.html

+0

Извините, забыл дать это, я обновил вопрос. –

+0

Выполняете ли вы изменения, внесенные в редактор? –

+0

'prefsEditor.putString (country.getCode(), country.getString()). Commit()' yup im в настоящее время пытается попытаться использовать базу данных sqlite, а не плохо, сообщите вам, как это происходит –

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