android-fragments Android中每个片段的不同操作菜单项具有相同的导航抽屉

u2nhd7ah  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(167)

我有一个主活动,它承载了一个导航抽屉和多个片段。每个片段都有自己的一组菜单项。
现在,当我添加onOptionsItemSelected方法时,问题开始出现,导航Drawer无法打开。当我不添加onOptionsItemSelected方法时,导航Drawer打开,但菜单项无法工作。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_payment_type_data_stats, parent, false);
    setHasOptionsMenu(true);
    return v;
}

@Override
public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater) {
    menu.clear();
    inflater.inflate(R.menu.menu_payment_type_stats, menu);
    Objects.requireNonNull(((MainActivity) Objects.requireNonNull(getActivity())).getSupportActionBar()).setTitle("title");
    super.onCreateOptionsMenu(menu, inflater);
}

@SuppressLint("NonConstantResourceId")
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_today:
            getDataForToday();
            break;
        case R.id.action_past_seven:
            getDataForPeriod(calendarDates.pastSeventhDate(), calendarDates.todayDate());
            break;
        case R.id.action_custom_date:
            openDatePickerDialog(sdf);
            break;
    }
    return true;
}

如果您对解决此问题有任何建议,请与我们分享。

qjp7pelc

qjp7pelc1#

可手动设置-

`drawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDrawer.openDrawer(GravityCompat.START);
            }
     });`

或者可以试试这个mDrawerToggle.syncState();

pgccezyw

pgccezyw2#

  • 主要活动变更:

您只需将MainActivity中的***onOptionsItemSelected***从

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return true;
    }

并将其更改为

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
       return super.onOptionsItemSelected(item);  //important
    }

对于MainActivity中的***onCreateOptionsMenu***方法,您可以使用

return true
  • 片段更改

对于片段(每个片段可以有单独的动作菜单项),您需要实现3个方法

*在创建视图时
*在创建选项菜单上
*在选定的选项项目上

示例:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_payment_type_data_stats, parent, false);
        setHasOptionsMenu(true);  //important
        return v;
    }

    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater) {
        menu.clear();
        //each frag can have different menu
        inflater.inflate(R.menu.menu_payment_type_stats, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

    @SuppressLint("NonConstantResourceId")
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId()) {
            case R.id.action_today:
                getDataForToday();
                break;
            case R.id.action_yesterday:
                getDataForPeriod(calendarDates.yesterdayDate(), calendarDates.yesterdayDate());
                break;
            case R.id.action_past_seven:
                getDataForPeriod(calendarDates.pastSeventhDate(), calendarDates.todayDate());
                break;
            case R.id.action_past_thirty:
                getDataForPeriod(calendarDates.pastThirtiethDate(), calendarDates.todayDate());
                break;
            case R.id.action_custom_date:
                openDatePickerDialog(sdf);
                break;
        }
        return false;
    }

相关问题