片段按返回按钮 [英] Fragment pressing back button

查看:26
本文介绍了片段按返回按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在有一个包含片段的活动

I am now having an activity containing fragments

[1]、[2]、[3]、[4]

[1] , [2] , [3] , [4]

如果按下按钮,[3],可以重定向到[4]

If pressing buttons , [3] , it can be redirected to [4]

我想实现后退按钮,如下所示..

I would like to implement the back button as shown follow..

在 [4] 处按回时,返回到 [3]

when pressing back at [4] , it return to [3]

在 [3] 处按回时,返回到 [2]

when pressing back at [3] , it return to [2]

当按回 [1] 时,活动完成();

when pressing back at [1] , the activity finishes();

当涉及到当前的实现时,它会完成活动而不是弹出 Fragment.你能告诉我我应该做什么或记住什么吗?

When it comes to the current implementation, it finish the activity instead of popping up the Fragment. Would you please tell me what I should do or keep in mind ?

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if( keyCode==KeyEvent.KEYCODE_BACK) 
    {   

        finish();
    }       

        return super.onKeyDown(keyCode, event); 

}   

推荐答案

在包含片段的活动的 onCreate() 中,添加一个 backstack 更改侦听器,如下所示:

In your onCreate() in your activity housing your fragments add a backstack change listener like so:

    fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            List<Fragment> f = fragmentManager.getFragments();
            Fragment frag = f.get(0);
            currentFragment = frag.getClass().getSimpleName();
        }
    });

(注意,我的 fragmentManager 被声明为全局的)现在,每次更改片段时,currentFragment 字符串将成为当前片段的名称.然后在 onBackPressed() 活动中,您可以像这样控制后退按钮的操作:

(Nb. my fragmentManager is declared global) Now every time you change fragment the currentFragment String will become the name of the current fragment. Then in the activities onBackPressed() you can control the actions of your back button as so:

    @Override
    public void onBackPressed() {

    switch (currentFragment) {
        case "FragmentOne":
            // your code here 
            return;
        case "FragmentTwo":
            // your code here
            return;
        default:
            fragmentManager.popBackStack();
            // default action for any other fragment (return to previous)
    }

}

我可以确认这个方法对我有用.

I can confirm that this method works for me.

更新:Kotlin

override fun onBackPressed() {

    when(supportFragmentManager.fragments[0].javaClass.simpleName){
        "FragmentOne" -> doActionOne()
        "FragmentTwo" -> doActionTwo()
        else -> supportFragmentManager.popBackStack()
    }
}

这篇关于片段按返回按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆