我正在开发一个应用程序,我使用导航抽屉选择一个片段来显示内容。 在其中一个片段中,我们将其称为fragmentX,我使用动作下拉列表选择一种显示数据的方法。
到目前为止一切顺利。现在出现了问题。每当我从fragmentX打开抽屉然后关闭它时,重新加载动作下拉列表,即如果在打开抽屉时在下拉列表中选择了方法2,则当抽屉关闭时,重新下载下拉列表并显示选项1。
我已按照Eclipse中提供的模板创建导航抽屉。 App结构如下:
MainActivity
protected void onCreate(Bundle savedInstanceState) {
...
mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager()
.findFragmentById(R.id.navigation_drawer);
// Set up the drawer.
mNavigationDrawerFragment.setUp(R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
}
NavigtaionDrawerFragment
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// If the drawer is open, show the global app actions in the action bar.
if (mDrawerLayout != null && isDrawerOpen()) {
inflater.inflate(R.menu.global, menu);
showGlobalContextActionBar();
return;
}
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
...
return super.onOptionsItemSelected(item);
}
FragmentX
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.local_fragmentX, menu);
setupDropDownSpinner();
super.onCreateOptionsMenu(menu, inflater);
}
private void setupDropDownSpinner() {
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
ScheduleSortSpinnerAdapter mScheduleSortSpinnerAdapter = new ScheduleSortSpinnerAdapter(
getActivity(), getResources().getStringArray(
R.array.schedule_sort_methods));
actionBar.setListNavigationCallbacks(mScheduleSortSpinnerAdapter, this);
}
我关闭的问题是动作下拉列表(setupDropDownSpinner())只能在fragmentX的onCreateOptionsMenu()中设置。但是当抽屉关闭时,它会使OptionMenu无效,因此会调用FragmentX的OnCreateOptionMenu()。有没有办法在onCreateOptionsMenu()方法之外设置下拉列表?我无法删除无效调用,因为它用于在全局选项菜单和特定片段的本地选项菜单之间切换。
答案 0 :(得分:0)
在主活动中,您可以监听抽屉关闭,检查fragmentX是否是当前片段,如果是,则调用接口方法或直接通过FragmentManager在片段上调用setupDropDown。
https://developer.android.com/reference/android/support/v4/widget/DrawerLayout.DrawerListener.html
如果你想要更加漂亮,你可以用抽屉收听者关闭抽屉的Otto或EventBus发布活动。