你好,我有一个有菜单项的菜单布局。菜单项有一个带有操作视图类的项,它应该在单击时附加一个片段。如何在使用菜单项的动作视图类使用单击AccountManagementFragment菜单项时附加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"/>我的onCreateOptionsMenu和onOptionsItemsSelected方法
@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);
}
}发布于 2020-01-27 15:56:42
不能在菜单项中将Fragment作为app:actionViewClass传递。当菜单项在onOptionItemSelected中被选中时,您真正能做的就是附加片段。
app:actionViewClassAccountManagementFragment中添加一个静态方法以获取实例公共类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);}
https://stackoverflow.com/questions/59933968
复制相似问题