方向更改时,片段不会持久存在

时间:2014-05-18 20:31:08

标签: android android-fragments

我使用下拉导航,由于一些主题问题,我使用了Spinner。我使用以下方法设置Actionbar:

public void setupActionBar() {
    Spinner navSpinner = new Spinner(new ContextThemeWrapper(this, R.style.Theme_Apptheme_Widget_ActionBarSpinner));
    navSpinner.setSelection(getSharedPreferences(APP_NAME, MODE_PRIVATE).getInt(SELECTED_POSITION, 0));
    Log.d(getClass().getName(), navSpinner.getSelectedItemPosition() + "");
    navSpinner.setAdapter(new ActionBarSpinnerAdapter(getActionBar().getThemedContext(), dataSource.getAllShoppingLists()));
    navSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            if (position < dataSource.getAllShoppingLists().size()) {
                if(fragmentManager.findFragmentByTag("shoppinglist" + position) == null) {
                    ShoppingListFragment shoppingListFragment = ShoppingListFragment.
                            newInstance(dataSource.getShoppingListForPosition(position).getId());
                    fragmentTransaction.replace(R.id.container, shoppingListFragment, "shoppinglist" + position);
                    }
            } else if (position == dataSource.getAllShoppingLists().size()) {
                if(fragmentManager.findFragmentByTag("shoppinglistmanager") == null) {
                    ShoppingListManagerFragment shoppingListFragment = ShoppingListManagerFragment.newInstance();
                    fragmentTransaction.replace(R.id.container, shoppingListFragment, "shoppinglistmanager");
                }
            }
            fragmentTransaction.commit();
            SharedPreferences preferences = getSharedPreferences(APP_NAME, MODE_PRIVATE);
            preferences.edit().putInt(SELECTED_POSITION, position).commit();
        }
    });

    getActionBar().setCustomView(navSpinner);
}

我在setRetainInstance(true); Fragment上致电onCreate(),但片段仍未被保留。我通过使用和EditText并输入文本来检查它。为什么会这样?

1 个答案:

答案 0 :(得分:0)

您需要为EditText设置标识符,以便Android系统保存和恢复视图状态。

来自docs

  

注意:为了让Android系统恢复状态   您的活动中的视图,每个视图必须具有唯一的ID,由。提供   android:id属性。

如果您使用的是布局文件,请通过属性android:id指定,或者如果您使用API​​创建EditText,请使用View.setId