操作下拉列表在关闭导航抽屉时重新加载

时间:2014-07-20 07:46:31

标签: android android-fragments drop-down-menu android-spinner navigation-drawer

我正在开发一个应用程序,我使用导航抽屉选择一个片段来显示内容。 在其中一个片段中,我们将其称为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()方法之外设置下拉列表?我无法删除无效调用,因为它用于在全局选项菜单和特定片段的本地选项菜单之间切换。

1 个答案:

答案 0 :(得分:0)

在主活动中,您可以监听抽屉关闭,检查fragmentX是否是当前片段,如果是,则调用接口方法或直接通过FragmentManager在片段上调用setupDropDown。

https://developer.android.com/reference/android/support/v4/widget/DrawerLayout.DrawerListener.html

如果你想要更加漂亮,你可以用抽屉收听者关闭抽屉的Otto或EventBus发布活动。