我有一个带有一个Activity(ActivityMain)和一些片段的应用程序。 NavigationDrawer控制片段的切换。在某些片段中,用户可以在不打开NavigationDrawer的情况下切换到另一个片段(例如,单击按钮)。
如果我使用NavigationDrawer在片段之间切换,一切都运行良好,但如果我在片段中使用控件(例如按钮)切换到另一个片段,我就无法设置NavigationDraver的selectedItem属性。 (实际上是ND中的ListView)selectedItem属性。
NavigationDrawer的selectedItem属性与sharedPreferences一起存储,并在 NavigationDrawer片段中的onDrawerOpened方法中恢复。
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
}
我试图将选择索引放在View的onClick事件中,如下所示,但是它没有工作。我也无法从其他片段中的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?你有这个任务的最佳实践吗?
感谢您提出建议。
答案 0 :(得分:1)
在用于切换片段的按钮的onClick事件中:
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
((MainActivity) getActivity()).changePosition(1);
sp.edit().putInt(STATE_SELECTED_POSITION, 1).**commit()**;
}
});
//in MainActivity.java
private void changePosition(int position)
{
list.setItemChecked(position, true);
}
如果您已将android:choiceMode =“singleChoice”属性设置为列表,则此方法有效。
另一种做法是在listview的适配器中执行:
.....
{
private int mSelectedItem = 0;
public View getView(int position, View convertView, ViewGroup parent)
{
if(position == mSelectedItem)
{
}
else
{
}
}
public void setSelectedItem(int position)
{
mSelectedItem = position;
}
}
//in MainActivity.java
private void changePosition(int position)
{
adapter.setSelectedItem(position);
adapter.notifyDataSetChanged();
}
还要确保将更改提交到SharedPreferences:
sp.edit().putInt(STATE_SELECTED_POSITION, 1).**commit()**;
也许你是在其他地方做的,但我没有在你所展示的片段中看到它。