繁体   English   中英

如何在片段中实现后退箭头

[英]How to implement a back arrow in fragment

我有一个导航抽屉,在它的第一个片段中,有一个新闻页面,用户单击该按钮可以查看整个新闻,并在那时输入另一个片段。

我想知道如何实现箭头以返回上一个片段,而不是打开导航抽屉的图标。

我以前从没用过这个,我也不知道。

这是我在MainActivity中的工具栏

appBarLayout = (AppBarLayout) findViewById(R.id.appBarLayout);

toolbar = (Toolbar) findViewById(R.id.toolbar);
//toolbar title
toolbar.setTitle(null);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
// Toolbar logo
logoToolbar = (ImageView) findViewById(R.id.logoToolbar);
logoToolbar.setImageResource(R.drawable.newstoolbar);

当用户单击MainFragment中的“阅读更多”时

newsMore.get(0).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);

                newsFrag1 newsFragment1 = new newsFrag1();
                ft.replace(R.id.fragment_container, newsFragment1);
                ft.commit();
            }
});

然后转到newsFrag1,我要使用向后箭头

我的工具栏XML

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="studio.com.archeagemanager.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:elevation="0dp">


        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_weight="1"
            android:background="?attr/colorPrimary"
            android:gravity="center_vertical"
            android:minHeight="56dp"
            android:weightSum="1"
            app:popupTheme="@style/AppTheme.PopupOverlay">

            <ImageView
                android:id="@+id/logoToolbar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center" />

        </android.support.v7.widget.Toolbar>

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

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="56dp">
    </FrameLayout>

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

碎片通常不会拦截后退/上推压力。 这通常是在活动级别完成的。 其背后的原因是因为您可以同时在屏幕上显示多个片段...那么哪个首先处理后推?

要在您的活动中处理它,请考虑跟踪您的前后状态。 让我们以片段计数作为示例状态:

@Override
public void onBackPressed() {
  // for every back press, if there is a fragment to remove, then remove it first
  if (getFragmentManager().getBackStackEntryCount() > 0) {
    getFragmentManager().popBackStack();
    return;
  }
  super.onBackPressed();

}

您还需要确保将原始片段事务添加到后台:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);

newsFrag1 newsFragment1 = new newsFrag1();
ft.replace(R.id.fragment_container, newsFragment1);
ft.addToBackStack();
ft.commit();

编辑:我认为从您的xml您要的是UP导航,而不是BACK导航。 如果是这种情况,那么您仍然需要利用Backstack,但是所有工作都需要由父活动完成(因为该活动拥有工具栏)

getSupportFragmentManager()
  .addOnBackStackChangedListener(new OnBackStackChangedListener(){
      @Override
      public void onBackStackChanged() {
        updateToolbarUp();
      }
  });

public void updateToolbarUp(){
  boolean showUp = getSupportFragmentManager().getBackStackEntryCount() > 0;
  getSupportActionBar().setDisplayHomeAsUpEnabled(showUp);
}

然后覆盖上压键以简单弹出后退堆栈:

@Override
public boolean onSupportNavigateUp() {
  getSupportFragmentManager().popBackStack();
  return true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM