用tableayout打电话给ViewPager一次



我有一个难得的问题。我的活动具有动态填充的选项卡(最多20个选项卡)。每个片段都有OnCreateOptionsMenu的实现和一个包含在按下时更改颜色的书签图标的菜单。当调用fragment的OnCreateOptionsMenu时,有一个类型Menu的类变量menu。这是为了使我在onCreateOptionsMenu外设置书签菜单项(这也是动态完成的)。

问题:当父活动只有一个选项卡(一个片段实例)时,此实现效果很好。但是,使用多个选项卡,该应用程序崩溃了错误: Attempt to invoke interface method android.view.MenuItem android.view.Menu.findItem(int)

我认为:我认为问题是OnCreateOptionsMenu被称为I.E类变量:menu仅设置一次,而对于第一个选项卡(fragment),当添加其他选项卡时,menunull

一些代码:片段

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);
    }

p.s sethasoptionsmenu()在fragment的ongreate

中设置为true

尝试这种方式

    @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;
    }

最新更新