android点dialog工具栏,android - 使用DialogFragment有条件地在工具栏中隐藏菜单项 - 堆栈内存溢出...

我正在使用带有工具栏的DialogFragment在具有JAVA的Android中做一个移动应用程序。

我想有条件地隐藏菜单项。

菜单

xmlns:app="http://schemas.android.com/apk/res-auto">

android:id="@+id/action_favorite"

android:title="favorite"

android:icon="@drawable/ic_favorite_white_off_24dp"

app:showAsAction="always" />

android:id="@+id/action_delete"

android:title="delete"

android:icon="@drawable/ic_delete_white_24dp"

app:showAsAction="always" />

android:id="@+id/action_save"

android:title="save"

app:showAsAction="always" />

布局

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:elevation="0dp">

android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:paddingStart="6dp"

android:paddingEnd="16dp"

app:contentInsetStartWithNavigation="0dp"

app:navigationIcon="@drawable/ic_close_black_24dp" />

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layout_behavior="@string/appbar_scrolling_view_behavior">

对话片段

public class MyDialogFragment extends DialogFragment implements Toolbar.OnClickListener, Toolbar.OnMenuItemClickListener {

public static final String TAG = "my_dialog";

private Toolbar toolbar;

public static MyDialogFragment display(FragmentManager fragmentManager) {

NewPersonDialogFragment exampleDialog = new NewPersonDialogFragment();

exampleDialog.show(fragmentManager, TAG);

return exampleDialog;

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setStyle(NewPersonDialogFragment.STYLE_NORMAL, R.style.AppTheme_FullScreenDialog);

}

@Override

public void onStart() {

super.onStart();

Dialog dialog = getDialog();

if (dialog != null) {

int width = ViewGroup.LayoutParams.MATCH_PARENT;

int height = ViewGroup.LayoutParams.MATCH_PARENT;

dialog.getWindow().setLayout(width, height);

dialog.getWindow().setWindowAnimations(R.style.AppTheme_Slide);

}

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

super.onCreateView(inflater, container, savedInstanceState);

View view = inflater.inflate(R.layout.dialog_fragment_new_person, container, false);

return view;

}

@Override

public void onViewCreated(View view, Bundle savedInstanceState) {

super.onViewCreated(view, savedInstanceState);

toolbar = view.findViewById(R.id.toolbar);

toolbar.inflateMenu(R.menu.new_person_dialog_menu);

toolbar.setNavigationOnClickListener(this);

toolbar.setOnMenuItemClickListener(this);

toolbar.setTitle("Add new");

}

@Override

public void onClick(View v) {

// This is working fine

}

@Override

public boolean onMenuItemClick(MenuItem item) {

// This is working fine

switch (item.getItemId()) {

case R.id.action_favorite:

return true;

case R.id.action_delete:

return true;

case R.id.action_save:

return true;

default:

return false;

}

}

@Override

public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {

super.onCreateOptionsMenu(menu, inflater);

// Removing item doesn't work!

menu.removeItem(R.id.action_delete);

}

}

我像这样打开DialogFragment:

MyDialogFragment.display(getActivity().getSupportFragmentManager());

当我打开DialogFragment时,菜单项未隐藏。

正如其他主题所说,我尝试过:

onActivityCreated方法中的setHasOptionsMenu(true) 。

onPrepareOptionsMenu方法中的getActivity().invalidateOptionsMenu() 。

我的目标是在用户打开DialogFragment时根据条件隐藏/删除菜单项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值