有没有一种相似于咱们在Android Activity中实现的方式能够在Android Fragment中实现onBackPressed()
? ide
因为片断生命周期没有onBackPressed()
。 在Android 3.0片断中还有其余替代方法能够替代onBackPressed()
吗? this
根据@HaMMeRed的回答,这里是伪代码,它应该如何工做。 能够说您的主要活动称为BaseActivity
,它具备子片断(如SlidingMenu lib示例中的片断)。 步骤以下: spa
首先,咱们须要建立接口和实现其接口的类以具备通用方法 code
建立类接口OnBackPressedListener
接口
public interface OnBackPressedListener { public void doBack(); }
建立实现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); } }
从如今开始,咱们将处理代码BaseActivity
及其片断 get
在类BaseActivity
上建立私有侦听BaseActivity
it
protected OnBackPressedListener onBackPressedListener;
建立方法以在BaseActivity
设置侦听BaseActivity
io
public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) { this.onBackPressedListener = onBackPressedListener; }
在重写onBackPressed
实现相似的东西 class
@Override public void onBackPressed() { if (onBackPressedListener != null) onBackPressedListener.doBack(); else super.onBackPressed();
在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; }
瞧,如今当您在片断中单击返回时,您应该捕获自定义的返回方法。
在片断之间进行过渡时,只需添加addToBackStack
,以下所示:
fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).addToBackStack("tag").commit();
若是编写addToBackStack(null)
,它将自行处理,可是若是提供标记,则应手动处理。
不要实现ft.addToBackStack()方法,这样当您按下“后退”按钮时,您的活动将完成。
proAddAccount = new ProfileAddAccount(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragment_container, proAddAccount); //fragmentTransaction.addToBackStack(null); fragmentTransaction.commit();
这些都不容易实现,也不会以最佳方式发挥做用。
片断有一个能够调用onDetach的方法来完成这项工做。
@Override public void onDetach() { super.onDetach(); PUT YOUR CODE HERE }
这将完成工做。
解决方案很简单:
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(); }