博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Fragment手柄后退按钮按下[重复]
阅读量:3590 次
发布时间:2019-05-20

本文共 4194 字,大约阅读时间需要 13 分钟。

本文翻译自:

This question already has answers here :
这个问题已经在这里有了答案
(45 answers)
(45个答案)
Closed 3 years ago .
3年前关闭。

I have some fragments in my activity 我的活动中有一些碎片

[1], [2], [3], [4], [5], [6]

And on Back Button Press I must to return from [2] to [1] if current active fragment is [2], or do nothing otherwise. 如果当前活动片段为[2],则在返回按钮上按I必须从[2]返回到[1],否则不执行任何操作。

What is the best practise to do that? 最佳做法是什么?

EDIT : Application must not return to [2] from [3]...[6] 编辑 :应用程序不得从[3] ... [6]返回到[2]


#1楼

参考:


#2楼

I'd rather do something like this: 我宁愿做这样的事情:

private final static String TAG_FRAGMENT = "TAG_FRAGMENT";private void showFragment() {    final Myfragment fragment = new MyFragment();    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);    transaction.addToBackStack(null);    transaction.commit();}@Overridepublic void onBackPressed() {    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);    if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not        super.onBackPressed();    }}

#3楼

I'm working with SlidingMenu and Fragment, present my case here and hope helps somebody. 我正在使用SlidingMenu和Fragment,在此介绍我的情况,希望对您有所帮助。

Logic when [Back] key pressed : 按下[返回]键时的逻辑:

  1. When SlidingMenu shows, close it, no more things to do. 当显示SlidingMenu时,将其关闭,无需执行其他操作。
  2. Or when 2nd(or more) Fragment showing, slide back to previous Fragment, and no more things to do. 或者,当显示第二个(或更多)片段时,请滑回到上一个片段,而无需执行其他操作。
  3. SlidingMenu not shows, current Fragment is #0, do the original [Back] key does. 滑动菜单未显示,当前片段为#0,执行原始的[返回]键。

    public class Main extends SherlockFragmentActivity { private SlidingMenu menu=null; Constants.VP=new ViewPager(this); //Some stuff... @Override public void onBackPressed() { if(menu.isMenuShowing()) { menu.showContent(true); //Close SlidingMenu when menu showing return; } else { int page=Constants.VP.getCurrentItem(); if(page>0) { Constants.VP.setCurrentItem(page-1, true); //Show previous fragment until Fragment#0 return; } else {super.onBackPressed();} //If SlidingMenu is not showing and current Fragment is #0, do the original [Back] key does. In my case is exit from APP } } }

#4楼

The most ideal way of doing this is found here: 最理想的方法是在这里找到:

public class MyActivity extends Activity{    //...    //Defined in Activity class, so override    @Override    public void onBackPressed()    {        super.onBackPressed();        myFragment.onBackPressed();    }}public class MyFragment extends Fragment{    //Your created method    public static void onBackPressed()    {        //Pop Fragments off backstack and do your other checks    }}

#5楼

Or you could use getSupportFragmentManager().getBackStackEntryCount() to check what to do: 或者,您可以使用getSupportFragmentManager().getBackStackEntryCount()来检查该怎么做:

@Override    public void onBackPressed() {        logger.d("@@@@@@ back stack entry count : " + getSupportFragmentManager().getBackStackEntryCount());        if (getSupportFragmentManager().getBackStackEntryCount() != 0) {            // only show dialog while there's back stack entry            dialog.show(getSupportFragmentManager(), "ConfirmDialogFragment");        } else if (getSupportFragmentManager().getBackStackEntryCount() == 0) {            // or just go back to main activity            super.onBackPressed();        }    }

#6楼

if you overide the onKey method for the fragment view you're gonna need : 如果您为片段视图覆盖onKey方法,则将需要:

view.setFocusableInTouchMode(true);    view.requestFocus();    view.setOnKeyListener(new View.OnKeyListener() {            @Override            public boolean onKey(View v, int keyCode, KeyEvent event) {                Log.i(tag, "keyCode: " + keyCode);                if( keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {                    Log.i(tag, "onKey Back listener is working!!!");                    getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);                    return true;                }                 return false;            }        });

转载地址:http://kelgj.baihongyu.com/

你可能感兴趣的文章
LeetCode1----最短无序连续子序列C实现(难度:easy)
查看>>
数据结构与算法----二叉搜索树(Binary Search Tree)
查看>>
数据结构与算法笔记---并查集
查看>>
数据结构与算法----深度优先搜索(DFS图示+C语言实现)
查看>>
LeetCode2----在自然数组成的串中寻找第n个数字(难度:easy)
查看>>
数据结构与算法笔记----广度优先搜索(BFS图示+C语言实现)
查看>>
数据结构与算法笔记-----动态规划简述(以Coin change为例图示+C语言实现)
查看>>
LeetCode3-----除数博弈(分析法+动态规划,C语言实现)
查看>>
LeetCode4----分石子(博弈类动态规划,C语言实现,难度:中等)
查看>>
数据结构与算法笔记-----B树,B+树及其应用
查看>>
数据结构与算法笔记----BF算法与KMP算法(图解+C语言实现+代码分析)
查看>>
Java-----面向面试每日刷10题(1-10)
查看>>
Java-----面向面试每日刷10题(11-20)
查看>>
数据结构笔记----哈希表及其在JAVA集合中的应用
查看>>
Java-----面向面试每日刷10题(21-30)
查看>>
Java-----面向面试每日刷10题(31-40)
查看>>
Java----面试中将用到的网络基础知识(1)
查看>>
迪杰斯特拉算法(图示+C语言实现)
查看>>
Java----面试中将用到的网络基础知识(2)
查看>>
Java----面试中将用到的网络基础知识(3)
查看>>