分享

从fragment跳转到activity , 返回到指定fragment页面

 饮茶仙人 2016-09-24

    前几天碰到这需求,我把这个记下了。

    先假设类似的需求, 有两个fragment(分别是FA,以及FB)依附在MainActivity , 从FA跳转到ActivityC .按返回键返回到指定fragment FB 。

    大家都觉得这其实很容易 ,只要在FA中加 startActivityForResult(intent, requestCode);  ,再在Activity的返回事件中设置ActivityC.this.setResult(resultCode); , 以及在

MainActivity 中重写  onActivityResult(int requestCode, int resultCode, Intent data) 方法。是的, 基本就是这样的 ,但是当你使用的时候 ,你会发现MainActivity中的

onActivityResult 方法会出现没有调用的情况, 简单理解就是没有返回到FB , 而是返回到默认的fragment。

    怎么达到我们的需求呢 , 第一,在FA中的startActivityForResult(intent, requestCode);方法前面加 getActivity().  这样可以让FA的宿主MainActivit启动目标ActivityC,这样就可以在MainActivit 中重写的 onActivityResult方法捕获到返回值 , 接下来就可以在MainActivity中判断requestCode以及 resultCode 来决定显示哪个fragment。

一下分别是 FB中执行的代码

getActivity().startActivityForResult(intent, 1);


 ActivityC 事件执行的代码:

// 这两句是放在点击返回控件触发的事件里面 ActivityC.this.setResult(2); ActivityC.this.finish();

MainActivity的代码:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); /** * 判断requestCode, resultCode 来确定要执行的代码 */ if(requestCode==1 && resultCode == 2){ // 在这设置选中你要显示的fragment } }


是不是就ok了呢 , 对的 。 不过当你按返回键时, 他还是会任性的 ,所以你需要在ActivityC 中捕获返回键事件

/** * 捕捉返回键事件 */ public boolean onKeyDown(int keyCode, KeyEvent event) { // 当点击返回键以及点击重复次数为0 if(keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ // 执行事件 ActivityC.this.setResult(2); ActivityC.this.finish(); } return false;


这样就可以达到我们刚才说的需求了。

如果你要传参也是可以的。自己看下api。




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多