首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用菜单项选择的选项上附加片段

如何在使用菜单项选择的选项上附加片段
EN

Stack Overflow用户
提问于 2020-01-27 15:19:27
回答 1查看 508关注 0票数 1

你好,我有一个有菜单项的菜单布局。菜单项有一个带有操作视图类的项,它应该在单击时附加一个片段。如何在使用菜单项的动作视图类使用单击AccountManagementFragment菜单项时附加action_account

我的菜单项布局

代码语言:javascript
复制
<item android:id="@+id/action_account"
        android:title="Account"
        android:icon="@drawable/ic_profile"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="ke.co.clinton.hama.viewslogic.account.AccountManagementFragment"/>

我的onCreateOptionsMenu和onOptionsItemsSelected方法

代码语言:javascript
复制
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        if (item.getItemId() == R.id.search) {

        }

        return super.onOptionsItemSelected(item);

    }

我的碎片类

代码语言:javascript
复制
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import ke.co.clinton.hama.MainActivity;
import ke.co.clinton.hama.R;
import ke.co.clinton.hama.interfaces.DrawerLocker;

public class AccountManagementFragment extends Fragment {

    private AccountManagementViewModel mViewModel;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        ((MainActivity)getActivity()).getSupportActionBar().hide();
        ((DrawerLocker) getActivity()).setDrawerEnabled(false);
        View view = inflater.inflate(R.layout.fragment_account_management, container, false);
        Toolbar toolbar = view.findViewById(R.id.toolbar);
        toolbar.setTitle("Title");
        toolbar.setNavigationIcon(R.drawable.ic_back_button);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity().onBackPressed();
            }
        });
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mViewModel = ViewModelProviders.of(this).get(AccountManagementViewModel.class);
        // TODO: Use the ViewModel

    }


    @Override
    public void onResume() {
        super.onResume();
        ((MainActivity)getActivity()).getSupportActionBar().hide();
        ((DrawerLocker) getActivity()).setDrawerEnabled(true);
    }
    @Override
    public void onStop() {
        super.onStop();
        ((MainActivity)getActivity()).getSupportActionBar().show();
        ((DrawerLocker) getActivity()).setDrawerEnabled(true);
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-27 15:56:42

不能在菜单项中将Fragment作为app:actionViewClass传递。当菜单项在onOptionItemSelected中被选中时,您真正能做的就是附加片段。

  1. 从菜单项中删除app:actionViewClass

  • AccountManagementFragment中添加一个静态方法以获取实例

公共类AccountManagementFragment扩展片段{.静态AccountManagementFragment newInstance() {返回AccountManagementFragment();}.}

  • 更改onOptionsItemSelected的实现以添加片段

@重写公共布尔值onOptionsItemSelected(@NonNull item) { if (item.getItemId() == R.id.action_account) { //确保在布局中添加片段容器视图(最好是FrameLayout) //这里我假设id是‘容器’== .replace(R.id.container ),AccountManagementFragment.newInstance() .commit() }返回super.onOptionsItemSelected(item);}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59933968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档