リストナビゲーションモードのアクションバーがあります。問題は、ナビゲーションスピナーからアイテムを選択した後、画面の向きが変わると、ナビゲーションスピナーの選択されたインデックスが0にリセットされることです。
構成の変更中にスピナーの選択したインデックスを保持するにはどうすればよいですか?
ありがとう
リストナビゲーションモードのアクションバーがあります。問題は、ナビゲーションスピナーからアイテムを選択した後、画面の向きが変わると、ナビゲーションスピナーの選択されたインデックスが0にリセットされることです。
構成の変更中にスピナーの選択したインデックスを保持するにはどうすればよいですか?
ありがとう
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()