如何在片斷中實現onBackPressed()?

有沒有一種相似於咱們在Android Activity中實現的方式能夠在Android Fragment中實現onBackPressed()ide

因爲片斷生命週期沒有onBackPressed() 。 在Android 3.0片斷中還有其餘替代方法能夠替代onBackPressed()嗎? this


#1樓

根據@HaMMeRed的回答,這裏是僞代碼,它應該如何工做。 能夠說您的主要活動稱爲BaseActivity ,它具備子片斷(如SlidingMenu lib示例中的片斷)。 步驟以下: spa

首先,咱們須要建立接口和實現其接口的類以具備通用方法 code

  1. 建立類接口OnBackPressedListener 接口

    public interface OnBackPressedListener { public void doBack(); }
  2. 建立實現OnBackPressedListener技能的OnBackPressedListener 生命週期

    public class BaseBackPressedListener implements OnBackPressedListener { private final FragmentActivity activity; public BaseBackPressedListener(FragmentActivity activity) { this.activity = activity; } @Override public void doBack() { activity.getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); } }
  3. 從如今開始,咱們將處理代碼BaseActivity及其片斷 get

  4. 在類BaseActivity上建立私有偵聽BaseActivity it

    protected OnBackPressedListener onBackPressedListener;
  5. 建立方法以在BaseActivity設置偵聽BaseActivity io

    public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) { this.onBackPressedListener = onBackPressedListener; }
  6. 在重寫onBackPressed實現相似的東西 class

    @Override public void onBackPressed() { if (onBackPressedListener != null) onBackPressedListener.doBack(); else super.onBackPressed();
  7. onCreateView的片斷中,您應該添加咱們的監聽器

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { activity = getActivity(); ((BaseActivity)activity).setOnBackPressedListener(new BaseBackPressedListener(activity)); View view = ... ; //stuff with view return view; }

瞧,如今當您在片斷中單擊返回時,您應該捕獲自定義的返回方法。


#2樓

在片斷之間進行過渡時,只需添加addToBackStack ,以下所示:

fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).addToBackStack("tag").commit();

若是編寫addToBackStack(null) ,它將自行處理,可是若是提供標記,則應手動處理。


#3樓

不要實現ft.addToBackStack()方法,這樣當您按下「後退」按鈕時,您的活動將完成。

proAddAccount = new ProfileAddAccount();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, proAddAccount);
//fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

#4樓

這些都不容易實現,也不會以最佳方式發揮做用。

片斷有一個能夠調用onDetach的方法來完成這項工做。

@Override
    public void onDetach() {
        super.onDetach();
        PUT YOUR CODE HERE
    }

這將完成工做。


#5樓

解決方案很簡單:

1)若是您具備全部片斷都擴展的基本片斷類,則將此代碼添加到其類中,不然建立此類基本片斷類

/* 
 * called when on back pressed to the current fragment that is returned
 */
 public void onBackPressed()
 {
    // add code in super class when override
 }

2)在您的Activity類中,以下重寫onBackPressed:

private BaseFragment _currentFragment;

@Override
public void onBackPressed()
{
      super.onBackPressed();
     _currentFragment.onBackPressed();
}

3)在您的Fragment類中,添加所需的代碼:

@Override
 public void onBackPressed()
 {
    setUpTitle();
 }
相關文章
相關標籤/搜索