Java 如何在片段中实现向后箭头

Java 如何在片段中实现向后箭头,java,android,Java,Android,我有一个导航抽屉,在它的第一个片段中,我有一个新闻页面,用户点击一个按钮可以看到整个新闻,这时它进入另一个片段 我想知道如何实现一个箭头以返回到上一个片段,而不是打开导航抽屉的图标 我以前从未用过这个,我不知道 这是我在MainActivity中的工具栏 appBarLayout = (AppBarLayout) findViewById(R.id.appBarLayout); toolbar = (Toolbar) findViewById(R.id.toolbar); //toolbar

我有一个导航抽屉,在它的第一个片段中,我有一个新闻页面,用户点击一个按钮可以看到整个新闻,这时它进入另一个片段

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

我以前从未用过这个,我不知道

这是我在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();

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

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();
@Override
public boolean onSupportNavigateUp() {
  getSupportFragmentManager().popBackStack();
  return true;
}

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

然后覆盖向上按钮,只需弹出后退按钮:

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();
@Override
public boolean onSupportNavigateUp() {
  getSupportFragmentManager().popBackStack();
  return true;
}

共享一些代码…检查一下你的工具栏的xml是什么?在片段中,如果你按下后退按钮,它将进入上一个活动,而不是片段。您必须能够在按下按钮时处理
method@CagriYalcin但是我可以从片段中更改图标?popBackStack是做什么的?我从未见过此方法PopBackstack()反转上一个碎片事务(已添加到backstack)