4

リストナビゲーションモードのアクションバーがあります。問題は、ナビゲーションスピナーからアイテムを選択した後、画面の向きが変わると、ナビゲーションスピナーの選択されたインデックスが0にリセットされることです。

構成の変更中にスピナーの選択したインデックスを保持するにはどうすればよいですか?

ありがとう

4

1 に答える 1

5

onSaveInstanceState選択したナビゲーションリストの位置を上書きして保存し、バンドルする必要があります。で位置を復元することを忘れないでくださいonCreate

以下の例を見てください。

public class MainActivity
{

    private static final String CURRENT_FRAGMENT_TAG = "fragmentPosition";

    @Inject @Named("navigationFragments")
    private Provider<? extends Fragment>[] fragmentProviders;

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

        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        actionBar.setListNavigationCallbacks(ArrayAdapter.createFromResource(
            this, R.array.navigation_menu, android.R.layout.simple_list_item_1), new ActionBar.OnNavigationListener()
        {
            @Override
            public boolean onNavigationItemSelected(int itemPosition, long itemId)
            {
                final String fragmentTag = "fragment-" + itemPosition;

                // to prevent fragment re-selection and loosing early saved state
                if (getSupportFragmentManager().findFragmentByTag(fragmentTag) != null)
                {
                    return true;
                }

                final Fragment fragment = fragmentProviders[itemPosition].get();
                getSupportFragmentManager().beginTransaction().
                    replace(android.R.id.content, fragment, fragmentTag).
                    commit();
                return true;
            }
        });
        actionBar.setSelectedNavigationItem(bundle != null
            ? bundle.getInt(CURRENT_FRAGMENT_TAG)
            : 0);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);
        outState.putInt(CURRENT_FRAGMENT_TAG, getSupportActionBar().getSelectedNavigationIndex());
    }

    /*

        Additional stuff here

     */

}

Provider<? extends Fragment>[] fragmentProviders新しいフラグメントを作成するファクトリメソッドオブジェクトのリストです。actionbarsherlockを使用しない場合は、 getSupportActionBar()togetActionBar()getSupportFragmentManager()toを置き換えますgetFragmentManager()

于 2012-12-12T21:22:15.320 に答える