ActionBar /工具栏在DialogFragment

时间:2018-06-03 22:15:22

标签: android android-fragments dialog toolbar android-appcompat

我接受了谷歌对话框材料设计的提示。 对于我的应用程序,我正在查看导航抽屉活动,该活动在编辑工具栏的一堆片段之间交换。

我想要的是一个全屏对话框,其中包含"关闭"按钮和工具栏角上的保存按钮。你可以在这里看到它: https://material.io/design/components/dialogs.html#full-screen-dialog

我正在关注Android开发人员的指南: https://developer.android.com/guide/topics/ui/dialogs

问题:当在对话框内设置工具栏时,它会完全混淆我的工具栏中的下一个片段。一旦对话框设置工具栏,Activity.setTitle()之类的东西就不会改变工具栏的标题。此外,覆盖方法OnCreateOptionsMenu(菜单,inflater)没有被调用,所以我甚至无法在对话框触发后对菜单(工具栏)上的视图进行充气。

我怀疑它是因为我改变了活动的工具栏,但我不知道该怎么做。调用对话框的片段里面有:

            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            AddListDialogFragment newFragment = new AddListDialogFragment();
            FragmentTransaction transaction = fragmentManager.beginTransaction();
            transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            transaction.add(R.id.drawer_layout, newFragment).addToBackStack(null).commit();

这是交易破坏者:在DialogFragment中我有这个:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_add_list, container, false);

    Toolbar toolbar = rootView.findViewById(R.id.toolbarDialog);
    toolbar.setTitle("Create List");


    ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);

    ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
        actionBar.setHomeAsUpIndicator(android.R.drawable.ic_menu_close_clear_cancel);
    }
    setHasOptionsMenu(true);

    return rootView;
}

值得注意的是,R.id.toolbarDialog是仅在DialogFragment的xml中使用的工具栏的特定ID:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbarDialog"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>

</android.support.design.widget.AppBarLayout>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Your content here"/>

</LinearLayout>

</android.support.design.widget.CoordinatorLayout>

普通工具栏有另一个ID。

正如我所说,我认为问题源于((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);,因为当你设置一个supportActionBar时,它不会回到之前的那个。我无法想到一个解决方法。 当Dialog关闭时,如何保存副本并返回原始SupportActionBar?

感谢。

0 个答案:

没有答案