当前位置: 首页 > 知识库问答 >
问题:

在viewpager中用tablayout调用一次OnCreateOptionsmenu

晁文斌
2023-03-14

我有个罕见的问题。我有一个动态填充选项卡的活动(多达20个选项卡)。每个片段都有oncreateOptionsMenu的实现和一个菜单,其中包含一个书签图标,当按下时会改变颜色。有一个menu类型的类变量menu,它是在调用fragment的oncreateoptionsmenu时设置的。这是为了使我能够在oncreateOptionsMenu之外设置书签菜单项(这也是动态完成的)。

问题:当父活动只有一个选项卡(一个片段实例)时,这个实现工作得很好。但是,使用多个选项卡时,应用程序会出现错误:尝试调用接口方法Android.view.menuitem Android.view.menu.finditem(int)

Menu menu;
...
...
@Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
 setMenuBookmark(ques_obj);
}

private void setMenuBookmark(QuestionAnswerList ques_obj){
        MenuItem menuBookmark = this.menu.findItem(R.id.action_bookmark);

        if (ques_obj.getIs_bookmarked().equals("1")) {
            menuBookmark.setIcon(R.drawable.ic_bookmark_white_24dp);
        } else {
            menuBookmark.setIcon(R.drawable.ic_bookmark_border_white_24dp);
        }
    }

...
...

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.cbt_fragment_menu, menu);
        this.menu = menu;

        super.onCreateOptionsMenu(menu, inflater);
    }

共有1个答案

尉迟晔
2023-03-14

试试这条路

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


         new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                getActivity().invalidateOptionsMenu()
            }
         }, 500 );

    }



    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.cbt_fragment_menu, menu);

         MenuItem menuBookmark = menu.findItem(R.id.action_bookmark)

         if (ques_obj.getIs_bookmarked().equals("1")) {
            menuBookmark.setIcon(R.drawable.ic_bookmark_white_24dp);
         } else {
            menuBookmark.setIcon(R.drawable.ic_bookmark_border_white_24dp);
         }

         return true;
    }
 类似资料:
  • 我正在使用开发一个应用程序。 这是我的活动: 我使用的FragmentStatePagerAdapter如下所示: }

  • 我有一个有4个选项卡的ViewPager片段,在第4个选项卡中有另一个有3个选项卡的ViewPager,这样,如果每当我切换我的topviewPagerTab(一个有4个选项卡)时,就不会调用sub ViewPager(有3个选项卡)中的setUserVisiblehint片段。

  • 我制作了一个应用程序,在其中我显示了一个谷歌地图,在我的位置上有GPS定位标记。这张地图在第一个选项卡上,我还有两个其他选项卡,如下图所示 现在我面临一个问题,即当我从选项卡1移动到选项卡2,然后移动到选项卡1时,它工作得很好,但当我移动到选项卡3,然后再移回选项卡1或选项卡2时,应用程序崩溃,并在LogCat中出现以下异常: 它在以下点显示错误: 无论我选择任何选项卡,它都会在上面一行显示错误,

  • 所以我有一个用于片段的容器,称为“容器”,它是一个FrameLayout。 在这个容器中,我使用名为CollectionsFragment的视页放置了一个片段。 null 我正在使用一个FragmentStatePagerAdapter,并将CollectionsFragment的getChildFragmentManager()传递给适配器。 我还有一个用于活动容器的onBackstackCha

  • 我刚开始使用Material Design的ViewPager和Tablayout(自带Android Studio)。我创造了5个碎片,我能够使用一个刷卡他们的需要。 根据用户在Fragment2中的选择,我想删除Fragment3。但是,从表列中移除选项卡后,当滑动到第三个选项卡(在移除第三个选项卡之前是第四个选项卡)时,会显示错误的片段--系统将第三个片段存储在内存中并显示它。如果我销毁了该

  • 我有一个有3个选项卡的ViewPager。根据我所看到的情况,当容器活动开始时,前两个片段将处于恢复状态。我还注意到,只有并排的两个片段被恢复,第三个被停止。我遇到的问题是,我从网络加载数据用于第一个片段,并将自定义对象存储在一个ArrayList中,这很正常,但当我导航到第三个片段时,数据会随着第一个片段进入停止状态而丢失。因此,当从第三个片段导航回第一个片段时,ArrayList就会为空(我在