onOptionsItemSelected里面没有调用ViewPager的片段

时间:2014-09-11 12:21:43

标签: android android-fragments android-actionbar android-viewpager

我在使用片段为平板电脑和智能手机开发应用时遇到了问题。

当在智能手机上执行app时,我会显示一个带有列表(类别)的片段。当点击一个项目时,我开始一个新的活动,该活动包含一个ViewPager,它用另一个列表(细节)来扩展Fragments。

当在平板电脑上执行app时,我的内部有两个片段。左边是类别列表,右边是详细列表。

到目前为止没有问题,但是在设置onOptionsItemSelected时我​​遇到了问题。

在智能手机上执行应用程序时,一切正常。这有效:

包含ViewPager的活动

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.icShare:
            sharePortal();
            break;
        default:
            break;
    }

    return super.onOptionsItemSelected(item);
}

ViewPager虚张声势的片段

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.icFavourite:
            Utils.setFavouritePortal(mContext, mPortal);
            getActivity().invalidateOptionsMenu();
            return true;
        case R.id.icShowFavourites:
            showFavouriteArticles();
            return true;
        default:
            break;
    }

    return super.onOptionsItemSelected(item);
}

但是在平板电脑上执行应用程序时,不会调用onOptionsItemSelected。这是代码:

包含ViewPager的片段

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.icShowFavourites:
            Log.e("asdf", "asdfasdf - test tablet");
            break;
        default:
            break;
    }

    return super.onOptionsItemSelected(item);
}

ViewPager虚张声势的片段

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.icFavourite:
            Utils.setFavouritePortal(mContext, mPortal);
            getActivity().invalidateOptionsMenu();
            return true;
        case R.id.icShowFavourites:
            showFavouriteArticles();
            return true;
        default:
            break;
    }

    return super.onOptionsItemSelected(item);
}

唯一的区别是,在智能手机上执行时,第一个onOptionsItemSelected由一个Activity保持,而tabled由一个片段保存。我还尝试从Activity中执行onOptionsItemSelected,其中包含包含ViewPager的片段,这些片段没有运气。

我怎样才能让它发挥作用?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

尝试将setHasOptionsMenu(true);放入要调用onOptionsItemSelected()的片段中。

Documentation

答案 1 :(得分:0)

该片段应调用setHasOptionsMenu(true),并应实施onCreateOptionsMenu()onOptionsItemSelected()