如何显示子片段工具栏的后退箭头

时间:2017-01-11 13:51:43

标签: android

我有一个包含大量片段的主要活动,主要活动布局如下:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.user.taiwandigestionsociety_v11.MainActivity">


    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF">

//----------------------here is my toolbar------------------------
<include layout="@layout/toolbar"/>

        <FrameLayout
            android:id="@+id/mainFrame"
            android:layout_gravity="end"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </FrameLayout>

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


    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@android:color/transparent"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header">
    </android.support.design.widget.NavigationView>


</android.support.v4.widget.DrawerLayout>

当我将页面更改为下一个片段时,我希望该片段在工具栏上有一个后退箭头,它可以返回先前的活动,也许是片段。

我尝试在主要活动上设置功能:

public void setBackArrow() {
    toolbar.setNavigationIcon(R.drawable.nav_icon_arrow_18x18_white);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switchFragment(NewsInformation.newInstance());
        }
    });
}

我的开关功能:

private void switchFragment(Fragment fragment) {
        FragmentManager manager = getActivity().getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.mainFrame, fragment, null);
        //transaction.addToBackStack(null);
        transaction.commit();
    }

我在下一个片段上调用它:

    @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
      View view =inflater.inflate(R.layout.activity_list_fragment,container, false);
//try to let the fragment has a back arrow toolbar , and has the onClick to previous layout     
      ((MainActivity) getActivity()).setBackArrow();

      return view;
      }

我可以切换到下一个片段并首先点击它。

但我得到的问题是,当我回到之前的布局时,我丢失了工具栏菜单功能原始,void setBackArrow()替换它,导航图标始终是R.drawable.nav_icon_arrow_18x18_white。

让我的子片段具有后退箭头并且可以更改为先前布局的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

使用AppCompatActivity代替Activity

以下步骤描述了整体构思。

onCreate()

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState(); 

在片段附加/ switchFragment完成后设置下面的代码

 DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
 drawer.closeDrawer(GravityCompat.START);  

onBackButtonHit()

 DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
 if (drawer.isDrawerOpen(GravityCompat.START)) {
      drawer.closeDrawer(GravityCompat.START);
  }   

string.xml

<resources>
    <string name="navigation_drawer_open">Open navigation drawer</string>
    <string name="navigation_drawer_close">Close navigation drawer</string>
</resources>

mainLayout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
       <!-- AppBarLayout -->
       <!-- Fragment holer etc..--> />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>