Android Fragment 手柄后退按钮按下

新手上路,请多包涵

我的活动中有一些片段

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

如果当前活动片段为 [2],则在返回按钮上按 I 必须从 [2] 返回到 [1],否则不执行任何操作。

这样做的最佳做法是什么?

编辑:应用程序不得从 [3]…[6] 返回到 [2]

原文由 skayred 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 598
2 个回答

当您在片段之间转换时,请调用 addToBackStack() 作为 FragmentTransaction 的一部分:

 FragmentTransaction tx = fragmentManager.beginTransation();
tx.replace( R.id.fragment, new MyFragment() ).addToBackStack( "tag" ).commit();

如果您需要更详细的控制(即,当某些片段可见时,您想抑制后退键),您可以在片段的父视图上设置 OnKeyListener

 //You need to add the following line for this solution to work; thanks skayred
fragment.getView().setFocusableInTouchMode(true);
fragment.getView().requestFocus();
fragment.getView().setOnKeyListener( new OnKeyListener()
{
    @Override
    public boolean onKey( View v, int keyCode, KeyEvent event )
    {
        if( keyCode == KeyEvent.KEYCODE_BACK )
        {
            return true;
        }
        return false;
    }
} );

原文由 Mark Allison 发布,翻译遵循 CC BY-SA 3.0 许可协议

我们创建了一个小型库来处理跨多个片段和/或在 Activity 中的后按。使用就像在你的 gradle 文件中添加依赖一样简单:

 compile 'net.skoumal.fragmentback:fragment-back:0.1.0'

让你的片段实现 BackFragment 接口:

 public abstract class MyFragment extends Fragment implements BackFragment {

    public boolean onBackPressed() {

        // -- your code --

        // return true if you want to consume back-pressed event
        return false;
    }

    public int getBackPriority() {
        return NORMAL_BACK_PRIORITY;
    }
}

通知你的片段关于背压:

 public class MainActivity extends AppCompatActivity {

    @Override
    public void onBackPressed() {
        // first ask your fragments to handle back-pressed event
        if(!BackFragmentHelper.fireOnBackPressedEvent(this)) {
            // lets do the default back action if fragments don't consume it
            super.onBackPressed();
        }
    }
}

有关更多详细信息和其他用例,请访问 GitHub 页面:

https://github.com/skoumalcz/fragment-back

原文由 gingo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题