Проблемы с Android FragmentActivity и вкладками

Я успешно преобразовал свою TabActivity в FragmentActivity, при этом содержимое вкладки представляет собой фрагменты. У меня две проблемы:

  1. Каждая из моих вкладок содержит EditText. Когда я меняю значение EditText на TAB1, переключаюсь на TAB2, а затем снова переключаюсь на TAB1, значение EditText сбрасывается.

  2. Если начать новую активность с одной из моих вкладок Fragments, а затем вернуться к существующей FragmentActivity, содержимое вкладки исчезнет. Изначально у меня была эта проблема при использовании TabHost, поэтому я потратил время, чтобы преобразовать все во фрагменты...

Что касается № 1, я предполагаю, что проблема связана с saveInstanceState. Я следовал примеру от Google точно, используя следующее в onCreate() моей FragmentActivity:

initialiseTabHost(savedInstanceState);
if (savedInstanceState != null) {
    mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
}

Кроме того, вот мой метод onSaveInstanceState() моей FragmentActivity:

protected void onSaveInstanceState(Bundle outState) {
    outState.putString("tab", mTabHost.getCurrentTabTag());
    super.onSaveInstanceState(outState);
}

Вот как выглядит один из фрагментов моей вкладки:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (container == null) {
        return null;
    }

    return (LinearLayout) inflater.inflate(R.layout.priority_boxes_tab,
            container, false);
}

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setRetainInstance(true);

    ArrayList<Supply> list = new ArrayList<Supply>();

    // More code here

}

Должен ли я делать что-то еще? У меня есть около 15 полей EditText на экране. Нужно ли мне каким-то образом сохранить все эти значения и установить их так, чтобы поля заполнялись этими значениями в следующий раз?

Что касается № 2, я понятия не имею, что еще я могу сделать. У кого-нибудь есть предложения?

Спасибо!


person littleK    schedule 30.03.2012    source источник


Ответы (1)


Могу ответить только на первый вопрос. Да, вам нужно сохранить содержимое каждого edittext вручную, если вы хотите, чтобы оно было восстановлено. Если их не нужно сохранять при запуске приложения, сохраните их в пакете в onSaveInstanceState и восстановите в onCreate и/или onRestoreInstanceState. Если вам нужно, чтобы значения были постоянными, используйте SharedPreferences или запишите их в другой файл или базу данных. Настройки, наверное, проще всего.

person Jacob Phillips    schedule 02.04.2012
comment
Я попробую это, спасибо. Было проще использовать TabHost, который запоминает для вас значения на каждой вкладке, но теперь он устарел, поэтому его использование больше не имеет смысла. К счастью, у меня есть статическое количество полей EditText на каждой вкладке. Однако это было бы сложно с динамическим числом полей EditText... - person littleK; 02.04.2012