0

有很多類似這樣的問題問,但一切我都試過,似乎不行。 本質上,我有一個主要活動,根據用戶單擊默認主頁片段時調用不同的片段。 我想在標題欄上有一個後退按鈕,以返回到前一個片段。返回導航標題欄 - 片段

我的片段從上述主要活動稱爲像這樣:

Fragment fragment = null; 
    fragment = new nextFragment(); 

    if (fragment != null) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     fragmentTransaction.replace(R.id.frame_container, fragment).addToBackStack(null); 
     fragmentTransaction.commit(); 
     fragmentTransaction.addToBackStack(null); 

    } else { 
     // error in creating fragment 
     Log.e("MainActivity", "Error in creating fragment"); 
    } 

但由於ActionBarActivity活動已被棄用我需要延長AppCompatActivity代替FragmentActivity這樣我就可以使用動作條(我假定這就是我需要)。 但是,我無法切換到我的片段。所以沒有人知道我可以在我的片段中實現後退按鈕,或者在這種情況下如何使用AppCompatActivity。 感謝您的幫助。

+0

你加這個'動作條動作條= getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true);'在你的代碼中? – Abhi

+0

我正在使用FragmentActivity。 – hahahakebab

+0

好了,你可以通過擴展AppCompatActivity然後執行'appCompatActivity.getSupportActionBar()實現後退按鈕setDisplayHomeAsUpEnabled(真);' – Abhi

回答

1

請試試這個,如果你擴展AppCompatActivity

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Include these 2 lines ONLY if need to use Toolbar from layout xml as Action Bar 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //Add back navigation in the title bar 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     // 
     //Other works to be done in onCreate..... 
     // 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getItemId() == android.R.id.home) { 
      //Title bar back press triggers onBackPressed() 
      onBackPressed(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    //Both navigation bar back press and title bar back press will trigger this method 
    @Override 
    public void onBackPressed() { 
     if (getFragmentManager().getBackStackEntryCount() > 0) { 
      getFragmentManager().popBackStack(); 
     } 
     else { 
      super.onBackPressed(); 
     } 
    } 
} 
1

您是在活動覆蓋onBackPressed()託管保存使用通過調用

addToBacktack(空).commit()

所以下一步的調用它的最後片段片段。

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0){ 
     getFragmentManager().popBackStack(); 
    } 
    else { 
     super.onBackPressed(); 
    } 
} 

所以每當你調用活動的onBackPressed()從片段,該片段會回到上次保存的片段。

+1

嗨, 我根本沒有看到標題欄上的後退按鈕。並使用您提供附帶的錯誤,「無法解析法‘onBackPressed’」的代碼 – hahahakebab

+0

OnBackPressed是在狀態欄(軟鍵),而不是在標題欄中的後退按鈕。 – Abhi

+1

好的,我的問題是在標題欄中的後退導航。 – hahahakebab

1

要添加後退按鈕在標題欄中,您必須將下面的代碼添加到您的片段。

Toolbar toolbar = (Toolbar)view.findViewById(R.id.app_bar); 
AppCompatActivity AppCompatActivity = (AppCompatActivity)getActivity(); 
AppCompatActivity.setSupportActionBar(toolbar); 
AppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    return view; 
} 

不要忘了將MainActivity擴展到AppCompatActivity。

然後,必須使用該Java代碼在我片段類用戶敲擊操作欄中的返回/向上圖標反應。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
switch (item.getItemId()) { 
    case android.R.id.home:    
     getActivity().onBackPressed(); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
} 
}