2017-10-12 44 views
0

我有一個導航抽屜,它的第一個片段中有一個新聞頁面,用戶單擊按鈕查看整個新聞,並在那一刻它進入另一個片段。如何在片段中實現向後箭頭

我想知道我是如何實現一個箭頭返回到前一個片段,而不是打開導航抽屜的圖標。

我從來沒有與此合作過,我不知道。

這是我在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> 
+0

分享一些代碼... –

+0

檢查了這一點https://stackoverflow.com/questions/5448653/how-to-implement-onbackpressed-in-fragments –

+0

什麼是您的工具欄的XML? –

回答

1

碎片通常不會攔截向後/向上的壓力。這通常是在活動層面完成的。這背後的原因是因爲你可以同時在屏幕上顯示多個片段......所以哪一個首先處理背部按壓?

要在您的活動中處理它,請考慮跟蹤您的前後狀態。讓我們用碎片計數作爲一個例子狀態:

@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導航。如果是這樣的話,那麼你仍然需要利用返回堆棧,但需要由父活動來完成所有的工作(因爲活動擁有工具欄)

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; 
} 
+0

什麼是popBackStack?我從來沒有見過這種方法 –

+1

popBackStack()反轉你最後一個FragmentTransaction(已添加到backstack)https://developer.android.com/reference/android/app/FragmentManager.html#popBackStack() – chrjs

相關問題