12

我有一個片段:片段:當按下後退按鈕及定製該回調調用

public class MyFragment extends Fragment{ 
    ... 
    @Override 
    public View onCreateView(...){...}  
    ... 
} 

我實例化:

MyFragment myFragment = new MyFragment(); 

我使用上面的片段替換當前片段:

FragmentManager fragmentManager = activity.getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

// replace fragment 
fragmentTransaction.replace(R.id.fragment_placeholder, myFragment, "myTag"); 

// NOTE: I did not add to back stack 

現在,myFragment顯示在屏幕上。注意:我沒有添加myFragment回棧

我的兩個問題:

如果現在,我按下手機背部按鈕,該片段的生命週期回調會被調用?

2.我怎樣才能定製後退按鈕點擊監聽MyFragment類? (請不要建議我做myFragment.getView().setOnclickListener,但這樣做在MyFragment類)

回答

21

問題1:見http://developer.android.com/reference/android/app/Fragment.html#Lifecycle

「由於不再被使用的片段,它會通過反向系列回調:

的onPause() - 片段不再與用戶交互可能是因爲它的活性被暫停或片段操作 在活性修飾它

onStop() - 片段對用戶不再可見,要麼是因爲其活動正在停止,要麼片段操作正在修改活動中的 。

onDestroyView() - 允許片段清理與其View相關的資源。

onDestroy() - 調用來完成片段狀態的最終清理。

onDetach() - 稱爲緊接不再與其活動相關的片段「

問題2:如果你一定要知道,這是後退按鈕特別那觸發回調,你可以捕獲你的片段的活動中的後退按鈕,並使用自己的方法來處理它:

public class MyActivity extends Activity 
{ 
    //... 
    //Defined in Activity class, so override 
    @Override 
    public void onBackPressed() 
    { 
     super.onBackPressed(); 
     myFragment.onBackPressed(); 
    } 
} 

public class MyFragment extends Fragment 
{ 
    //Your created method 
    public void onBackPressed() 
    { 
     //Handle any cleanup you don't always want done in the normal lifecycle 
    } 
} 
+0

這隻能用於f或清理。如果使用後退按鈕,我認爲Mar是爲了防止來自後臺的交換片段。 – ATom 2012-07-30 15:37:34

+0

在我的情況下,'onBackPressed()'沒有被調用。我通過getView()將焦點集中到片段視圖來修復它。setFocusableInTouchMode(true); getView()。requestFocus();在onResume()中。 – 2015-03-25 15:18:29

相關問題