[英]How to call another fragment from one fragment on hitting back button?
我的應用程序中有一個MainActivity ,從中可以使用Navigation Drawer調用所有片段。 活動的默認片段為“ A”。 因此,每次我打開應用程序時,都會調用“ A”片段。 當我從另一個片段B擊中“返回”時,我想轉到默認片段“ A”,就像gmail中發生的一樣-如果我們擊中任何片段,它將返回默認片段“主郵件”。
我嘗試通過將以下代碼添加到片段“ B”的onPause()中來調用“ A”片段。
@Override
public void onPause() {
super.onPause();
fragment = new A();
FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();
fragTransaction.replace(R.id.a,fragment ).commit();
}
但是,當我回擊時,片段'A'被調用了片刻,但隨后應用程序意外關閉。
Logcat:
01-14 12:44:42.264:E / WindowManager(4655):android.view.WindowLeaked:活動com.litchi.iguardian.MainActivity已泄漏窗口com.android.internal.policy.impl.PhoneWindow $ DecorView {41da6348 VE。 ... R ..... ID 0,0-513,243}最初是在此處添加的
正確的做法是什么?
當您按下后退按鈕時,您應該自定義行為,因為默認情況下,它將破壞啟動的活動,並且您會在回調從onPause()
到onStop()
同時看到您的片段,並且活動不再對您可見。 只需重寫此方法,就必須解決問題:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// your code
return true;
}
return super.onKeyDown(keyCode, event);
}
但是,是的,它用於全局控制,用於切換片段,您也可以調用addToBackStack();
當您想通過按返回按鈕返回上一個片段時。
返回上一個片段,請參見以下代碼:
fragmentManager.popBackStack(...);
將此放在onBack事件中
調用popBackStack方法,首先需要在調用片段時調用addToBackStack方法
使用此代碼
android.support.v4.app.Fragment detail = new CurrentClass();
detail.setArguments(bundle);
android.support.v4.app.FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.content_frame, detail).addToBackStack("back")
.commit();
無需在onPause()中編寫該代碼,您可以在您的主要活動的onBackPressed()中編寫該代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.