如何在片断中实现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();
 }
相关文章
相关标签/搜索