簡體   English   中英

如何在點擊返回按鈕時從一個片段中調用另一個片段?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM