【发布时间】:2014-12-09 13:44:15
【问题描述】:
我有一个包含一个 Activity (ActivityMain) 和一些片段的应用程序。 NavigationDrawer 控制片段的切换。在某些片段中,用户有机会在不打开 NavigationDrawer 的情况下切换到另一个片段(例如单击按钮)。
一切正常,如果我使用 NavigationDrawer 在片段之间切换,但如果我使用片段中的控件(例如按钮)切换到另一个片段,我无法设置 NavigationDraver 的 selectedItem 属性(实际上是 ListView在 ND) selectedItem 属性中。
NavigationDrawer 的 selectedItem 属性与 sharedPreferences 一起存储,并在 NavigationDrawer 片段中的 onDrawerOpened 方法中恢复。
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
}
我尝试将 View 的 onClick 事件中的选择索引设置为 STATE_SELECTED_POSITION 值,如下所示,但它不起作用。我也无法从 other Fragment 中的 sharedPreferences 中获取值。
public void navigationRowClick(View view) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
switch(view.getId()) {
case R.id.tr_conv:
sp.edit().putInt(STATE_SELECTED_POSITION, 1);
((MainActivity)getActivity()).changeFrame(1);
((MainActivity)getActivity()).restoreActionBar();
break;
case R.id.trCalc:
sp.edit().putInt(STATE_SELECTED_POSITION, 2);
((MainActivity)getActivity()).changeFrame(2);
((MainActivity)getActivity()).restoreActionBar();
break;
case R.id.trCalo:
Integer i = sp.getInt(STATE_SELECTED_POSITION, 100); // get value test
String s = i.toString();
Toast.makeText(getActivity(), s, Toast.LENGTH_SHORT).show();
break;
}
}
我的问题是,我应该如何从另一个片段中设置 NavigationDrawer 的 selectedItem?您对此任务有最佳实践吗?
提前感谢您的建议。
【问题讨论】:
-
在切换片段的按钮的onClick事件中 put outState.putInt(STATE_SELECTED_POSITION, position);该位置将是片段在 ND 列表中的位置
-
谢谢你的建议,Goran。不幸的是,建议的解决方案不起作用。也许我没有以正确的方式使用 SharedPreferences。我已经编辑了我的帖子。
标签: android android-fragments navigation-drawer