динамический спиннер и общие предпочтения - PullRequest
0 голосов
/ 09 мая 2011

в моем приложении для Android у меня есть кнопка, которая добавляет новый динамический Spinner в макет.Все созданные Spinners используют один и тот же массив.

Что работает до сих пор, я могу сохранить количество созданных Spinners и воссоздать их после перезапуска приложения.Но я действительно хотел бы сохранить выбранную позицию каждого Spinner в sharedPreferences, и именно здесь я застрял в ForceClose Desaster ...

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

Итак, это то, что я сделал:

public void addSpinner(){

    LinearLayout AddLayout = (LinearLayout)findViewById(R.id.linearAddScroll);
    spinner = new Spinner(this);
    ArrayAdapter<?> adapt = ArrayAdapter.createFromResource(this,
            R.array.Filter, android.R.layout.simple_spinner_item);
    adapt.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapt);
    AddLayout.addView(spinner);
    }

это создает Spinner.

public void onClick(View v) {
            addSpinner();


            int ID = 1000+x;
            spinner.setId(ID);
            Toast.makeText(MatReporterActivity.this,"ID" + ID, 5)
            .show();
            x++;
        }

установите идентификатор.

Это то, что я делаю в методе on Create:

x = settings.getInt("xsave", 1);
    for(y = 1; y < x; y++){
        addSpinner();

        int ID = 1000+y;
        Spinner s = (Spinner) findViewById(ID);

        String ys= Integer.toString(ID);
        Toast.makeText(MatReporterActivity.this,"ID" +ys, 5)
        .show();
        int yf = settings.getInt(ys, 1);
        s.setSelection(yf);
        }

И это onStop ():

SharedPreferences settings = PreferenceManager
            .getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("xsave", x);
    for(y = 1; y < x; y++){
        int ID = 1000+y;
        Spinner s2= (Spinner) findViewById(ID);
        int possS = s2.getSelectedItemPosition();
        Toast.makeText(MatReporterActivity.this, "IDStop" + ID, 5)
        .show();
        String ys= Integer.toString(ID);
        editor.putInt(ys, possS);
    }

    editor.commit();
}

Я думаю, что есть логическая проблема вМетод onCreate, но я не могу его найти, также я не нашел никакой помощи в Интернете, как заполнять и сохранять динамически созданные счетчики.

Так что, возможно, у кого-то есть идея.спасибо.

1 Ответ

0 голосов
/ 09 мая 2011

SharedPreferences не является хорошим способом для хранения такого рода данных.Вы должны попытаться выполнить эти 2 шага:

Создать класс, который реализует Serializable для представления данных, которые вы хотите сохранить (вы можете использовать список объектов Serializable)

public class SpinnerSave implements Serializable {
  public String ID;
  public int selection;

  public SpinnerSave(String ID, int selection){
    this.ID = ID;
    this.selection = selection;
  }
}

Затем выследует записать ваши данные в файл, например,

private void saveState() {
final File cache_dir = this.getCacheDir(); 
final File suspend_f = new File(cache_dir.getAbsoluteFile() + File.separator + SUSPEND_FILE);

FileOutputStream   fos  = null;
ObjectOutputStream oos  = null;
boolean            keep = true;

try {
    fos = new FileOutputStream(suspend_f);
    oos = new ObjectOutputStream(fos);

    oos.writeObject(this.gameState);
}
catch (Exception e) {
    keep = false;
    Log.e("MyAppName", "failed to suspend", e);
}
finally {
    try {
        if (oos != null)   oos.close();
        if (fos != null)   fos.close();
        if (keep == false) suspend_f.delete();
    }
    catch (Exception e) { /* do nothing */ }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...