Как сохранить состояние флажков, присутствующих в списке, навсегда? - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть собственный просмотр списка с флажками. Я хочу, чтобы состояние флажков сохранялось в течение всего срока службы приложения. Как мне этого добиться? Спасибо

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Класс SharedPreferences предоставляет общую структуру, которая позволяет сохранять и извлекать постоянные пары ключ-значение примитивных типов данных.

Для полноты картины приведу здесь пример кода.

public class Xxx extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";

@Override
protected void onCreate(Bundle state){
   super.onCreate(state);
   . . .

   // Restore preferences
   SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
   boolean silent = settings.getBoolean("silentMode", false);
   setSilent(silent);
}

@Override
protected void onStop(){
   super.onStop();

  // We need an Editor object to make preference changes.
  // All objects are from android.context.Context
  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putBoolean("silentMode", mSilentMode);

  // Commit the edits!
  editor.commit();
}

}

0 голосов
/ 18 февраля 2012

Вы не должны использовать флажки в ListView, я предпочитаю использовать TableLayout для них.Однако, если вы хотите использовать ListView, рассмотрите следующие предыдущие вопросы: -

Состояние сохранения Android-флажка в ListView с адаптером курсора

Поиск состояния Checked ofфлажок в настраиваемом представлении списка

Код не расширяет ListViewActivity, но имеет просмотр списка

Существует множество других вопросов по этой теме, рассмотрите возможность поискадля них тоже.

РЕДАКТИРОВАТЬ: Пример динамического TableLayout для замены ListView

XML: -

<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout
 android:id="@+id/table"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</TableLayout>
</ScrollView>

Отрывок кода в Java: -

TableLayout table=(TableLayout)findViewByid(R.id.table);
ArrayList<CheckBox> cbData=new ArrayList<CheckBox>();
for(int i=0;i<rowCount;i++){
    TextView t1=new TextView(this);
    t1.setText("Text1");
    TextView t2=new TextView(this);
    t2.setText("Text2");
    CheckBox cb=new CheckBox(this);
    TableRow row=new TableRow(this);
    row.addView(t1);
    row.addView(t2);
    row.addView(cb);
    cbData.add(cb);
    table.addView(row);
}

Используя приведенный выше код, вы можете добавить столько строк, сколько хотите в TableLayout, и поскольку TableLayout не повторяет свой вид, вам не нужно будет кэшировать данные и состояние флажка.Для доступа к флажкам вы можете использовать метод cbData.get (index).Намного проще, чем кодировать для кэширования состояния флажка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...