onActivityResult

在Android开发中,如果网络获取、数据解析、处理、控件适配、对话框等等都堆到Activity中的话,在后期做维护或者需要更改功能的时候,处理起来会很麻烦;所以经常做的就是将各个功能模块化,举个例子,在一个界面里面,需要有个对话框,可以将对话框提取出来,用一个Activity代替Dialog;那么这样会遇到一个问题,那就是,当你跳转Activity返回到之前的Activity,要怎么接受传回来的数据?

答案就是用onActivityResult,点击事件中,跳转Activity用的是startActivityForResult,

private int INTENT_SHOP = 2;
 @OnClick(R.id.button3)
    public void onClick() {
        startActivityForResult(new Intent(this, SeleteShop.class), INTENT_SHOP);
    }

然后在Activity的onActivityResult中接收返回值:

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
            case 2:
                if (resultCode == Activity.RESULT_OK) {
                    ToastUtil.showToast(this, data.getStringExtra("SHOP"));
                }
                break;
            default:
                break;
        }
    }

在新的Activity中,在点击关闭Activity传值的操作中写上:

          Intent intent = new Intent();
          intent.putExtra("SHOP", "today");
          setResult(Activity.RESULT_OK, intent);
          finish();

还有一种经常遇到的情况,那就是我们首页是底部点击切换fragment的Activity

这种情况,在切换Fragment的时候,需要在Add Fragment的时候,设置一个TAG;

private String[] mTag = {"Home", "Report", "Operate", "User"};
@Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        for (int i = 0; i < rgs.getChildCount(); i++) {
            if (rgs.getChildAt(i).getId() == checkedId) {
                Fragment fragment = fragments.get(i);
                FragmentTransaction ft = obtainFragmentTransaction(i);

                getCurrentFragment().onPause(); // 暂停当前tab

                if (fragment.isAdded()) {
                    fragment.onResume(); // 启动目标tab的onResume()
                } else {
                    ft.add(fragmentContentId, fragment,mTag[i]);
                }
                showTab(i); // 显示目标tab
                ft.commit();

                // 如果设置了切换tab额外功能功能接口
                if (null != onRgsExtraCheckedChangedListener) {
                    onRgsExtraCheckedChangedListener.OnRgsExtraCheckedChanged(radioGroup, checkedId, i);
                }

            }
        }

    }

在Activity的onActivityResult中写,之后的操作跟前面的操作一样。

private String mTAG = "Home";
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        FragmentManager fragmentManager = getSupportFragmentManager();
        Fragment fragment  = fragmentManager.findFragmentByTag(mTAG);
        fragment.onActivityResult(requestCode,resultCode,data);
    }

 FragmentTabAdapter tabAdapter = new FragmentTabAdapter(this, fragments, R.id.tab_content, tabsRg);
        //切换fragment的时候的动作
        tabAdapter.setOnRgsExtraCheckedChangedListener(new FragmentTabAdapter.OnRgsExtraCheckedChangedListener() {
            @Override
            public void OnRgsExtraCheckedChanged(RadioGroup radioGroup, int checkedId, int index) {
                switch (index) {
                    case 0:
                        mTAG = "Home";
                        break;
                    case 1:
                        mTAG = "Report";
                        break;
                    case 2:
                        mTAG = "Operate";
                        break;
                    case 3:
                        mTAG = "User";
                        break;
                    default:
                        break;
                }
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值