Android 碎片不';我不能坚持改变方向

Android 碎片不';我不能坚持改变方向,android,android-fragments,Android,Android Fragments,我使用下拉导航,由于一些主题问题,我使用微调器。我使用以下方法设置Actionbar: public void setupActionBar() { Spinner navSpinner = new Spinner(new ContextThemeWrapper(this, R.style.Theme_Apptheme_Widget_ActionBarSpinner)); navSpinner.setSelection(getSharedPreferences(APP_NAME,

我使用下拉导航,由于一些主题问题,我使用微调器。我使用以下方法设置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);
}
public void setupActionBar(){
微调器navSpinner=新微调器(新的ContextThemeWrapper(这个,R.style.Theme\u Apptheme\u Widget\u ActionBarSpinner));
setSelection(getSharedReferences(APP_NAME,MODE_PRIVATE).getInt(SELECTED_POSITION,0));
Log.d(getClass().getName(),navSpinner.getSelectedItemPosition()+“”);
setAdapter(新的ActionBarSpinnerAdapter(getActionBar().getThemedContext(),dataSource.GetAllShoppingList());
navSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
FragmentManager FragmentManager=getFragmentManager();
FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction();
if(位置

我调用
setRetainInstance(true)片段
onCreate()
上执行code>,但仍然没有持久化片段。我通过编辑文本和输入文本来检查这一点。为什么会发生这种情况?

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

发件人:

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


如果您正在使用布局文件,请通过属性
android:id
指定它,或者如果您正在使用API创建
EditText
,则使用。

您是如何远离片段的?你在破坏活动吗?@yiati我在旋转设备变量数据源来自哪里?很可能您从它那里收到的ID不是您想要的。使用ID还原片段的另一种方法是使用和从Fragment类保存基元值,并使用它们重新创建片段。@yiati是在onCreate上创建的。dataSource=新ShoppingListDataSource(此);dataSource.open();片段应该能够自动保留。如果没有其他类,如ShoppingListDataSource或片段,则不太确定。是setRetainInstance会自动保留片段中的信息,但如果您没有看到这些信息被还原,则可能不是手动还原视图的状态,也可能是使用了错误的片段。