如何在片段中实现onBackPared()?

如何在片段中实现onBackPared()?

我们有没有办法onBackPressed()在Android片段中,类似于我们在Android活动中实现的方式?

因为片段生命周期没有onBackPressed()..有什么其他方法可以替代骑吗?onBackPressed()在Android 3.0片段中?


慕容3067478
浏览 484回答 3
3回答

ABOUTYOU

我用这种方式解决了onBackPressed在活动中。所有FragmentTransaction是addToBackStack承诺前:@Overridepublic void onBackPressed() {     int count = getSupportFragmentManager().getBackStackEntryCount();     if (count == 0) {         super.onBackPressed();         //additional code     } else {         getSupportFragmentManager().popBackStack();     }}

尚方宝剑之说

我认为最好的解决办法是Java解决方案创建简单的界面:public interface IOnBackPressed {     /**      * If you return true the back press will not be taken into account, otherwise the activity will act naturally      * @return true if your processing has priority if not false      */     boolean onBackPressed();}在你的活动中public class MyActivity extends Activity {     @Override public void onBackPressed() {     Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.main_container);        if (!(fragment instanceof IOnBackPressed) || !((IOnBackPressed) fragment).onBackPressed()) {           super.onBackPressed();        }     } ...}最后,在您的片段中:public class MyFragment extends Fragment implements IOnBackPressed{    @Override    public boolean onBackPressed() {        if (myCondition) {             //action not popBackStack             return true;          } else {             return false;         }     }}Kotlin解1-创建接口interface IOnBackPressed {     fun onBackPressed(): Boolean}2-准备你的活动class MyActivity : AppCompatActivity() {     override fun onBackPressed() {         val fragment =             this.supportFragmentManager.findFragmentById(R.id.main_container)         (fragment as? IOnBackPressed)?.onBackPressed()?.not()?.let {             super.onBackPressed()         }     }}3-在目标片段中实现class MyFragment : Fragment(), IOnBackPressed {     override fun onBackPressed(): Boolean {         return if (myCondition) {             //action not popBackStack             true         } else {             false         }     }}

www说

根据@Hamed的回答,这里是伪码,它应该如何工作。让我们说你的主要活动叫做BaseActivity其中包含子片段(类似于SlidingMenulib示例)。以下是步骤:首先,我们需要创建接口和类,它实现了它的接口,以具有泛型方法。创建类接口OnBackPressedListenerpublic interface OnBackPressedListener {     public void doBack();}创建实现以下技能的类:OnBackPressedListenerpublic 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及其碎片在类的顶部创建私有侦听器BaseActivityprotected OnBackPressedListener onBackPressedListener;创建方法来设置侦听器BaseActivitypublic void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) {     this.onBackPressedListener = onBackPressedListener;}在覆盖onBackPressed实现这样的东西@Overridepublic void onBackPressed() {     if (onBackPressedListener != null)         onBackPressedListener.doBack();     else         super.onBackPressed();在你的碎片里onCreateView您应该添加我们的侦听器@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {     activity = getActivity();     ((BaseActivity)activity).setOnBackPressedListener(new BaseBackPressedListener(activity));     View view = ... ;//stuff with view     return view;}现在,当您单击Back in片段时,您应该在Back方法上捕获您的自定义。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android