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



您好,我的菜单布局具有菜单项。菜单项具有一个带有操作视图类的项,该项应在单击时附加一个片段。使用菜单项的操作视图类单击action_account菜单项时,如何附加帐户管理片段

我的菜单项布局


<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"/>

我的创建选项菜单和选项项选定的方法


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

我的片段类


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

不能在菜单项中app:actionViewClass传递Fragment。您真正可以做的是在onOptionItemSelected中选择菜单项时附加片段。

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

    <item android:id="@+id/action_account"
    android:title="Account"
    android:icon="@drawable/ic_profile"
    app:showAsAction="collapseActionView|ifRoom"/>
    
  2. AccountManagementFragment中添加静态方法以获取实例

    public class AccountManagementFragment extends Fragment {
    ...
    ...
    static AccountManagementFragment newInstance() {
    return AccountManagementFragment();
    }
    ...
    ...
    }
    
  3. 更改onOptionsItemSelected的实现以添加片段

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    if (item.getItemId() == R.id.action_account) {
    // Make sure to add a fragment container view in the layout (preferably a FrameLayout)
    // Here I am assuming the id is 'container'
    getSupportFragmentManager().beginTransaction()
    .replace(R.id.container, AccountManagementFragment.newInstance())
    .commit()
    }
    return super.onOptionsItemSelected(item);
    }
    

最新更新