Activity 跳转到指定非宿主 Fragment

来源:互联网 发布:搜狗搜索sem优化师 编辑:程序博客网 时间:2024/05/20 10:23

这里写图片描述

如图所示,MainActivity 中的 MineFragment 跳转到 LoginActivity 中,点击注册按钮,进入RegisterActivity,并将 RequestCode 也带入到 RegisterActivity,之后在 RegisterActivity 输入手机号和密码点击注册,将 RequestCode 和 ResultCode 带入 RegisterActivity2,获取验证码之后,RegisterActivity2 点击完成,跳转到 MainActivity,MainActivity 会在 onActivityResult 回调中判断 RequestCode 和 ResultCode 并跳转到 MineFragment。

这里写图片描述

MainActivity 默认是跳到第一个 Fragment,MineFragment 是在最后一个,所以要指定跳转。

看懂了解析图,就来写代码吧,从 MineFragment 中入手。

MineFragment.java

/** * 登录点击事件 * @param view */@OnClick(value = {R.id.profile_image, R.id.tv_username})public void toLogin(View view) {    /**     * 判断是否已经登录,若已登录,则提示,未登录,则跳转     */    User user = MyApplication.getInstance().getUser();    if (user != null) {        ToastUtils.show(getContext(), "您已登录");        mImageView.setClickable(false);        mTvUsername.setClickable(false);    } else {        Intent intent = new Intent(getActivity(), LoginActivity.class);        startActivityForResult(intent, Constants.REQUEST_CODE);    }}

LoginActivity.java

这里将 RequestCode = 1 传到 RegisterActivity 中

    /**     * 跳转到注册页面     * @param v     */    @OnClick(R.id.tv_register)    public void register(View v) {        startActivityForResult(new Intent(this, RegisterActivity.class),1);    }

RegisterActivity.java

将 RequestCode = 1 和 ResultCode = 2 传到 Register2Activity

Intent intent = new Intent(RegisterActivity.this, Register2Activity.class);intent.putExtra("phone", phone);intent.putExtra("pwd", pwd);intent.putExtra("countryCode", countryCode);startActivityForResult(intent,1);setResult(2);

Register2Activity.java

Register2Activity 跳转到 MainActivity 中,在 MainActivity 中接收 RequestCode = 1 和 ResultCode = 2 并做相应处理

//跳转到登录页面startActivity(new Intent(Register2Activity.this, MainActivity.class));

RegisterActivity 跳转成功,Register2Activity 注册完成时还要将自身 finish()

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == 1 && resultCode == 2) {        setResult(2);        finish();    }}

MainActivity.java

MainActivity 中根据 RequestCode = 1 和 ResultCode = 2 设置跳转的 Fragment

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == 1 && resultCode == 2) {        this.gotoMineFragment();    }}private FragmentManager fmanager;private FragmentTransaction ftransaction;private void gotoMineFragment() {    fmanager = getSupportFragmentManager();    ftransaction = fmanager.beginTransaction();    MineFragment  mineFragment = new MineFragment();    ftransaction.replace(R.id.realtabcontent, mineFragment);    ftransaction.commit();}

小疑问

我调试了程序,原来在 Register2Activity 里面写的代码是下面这个

startActivityForResult(new Intent(Register2Activity.this, MainActivity.class),1);

但是,会出现一种状况是我根本不会跳转到 MainActivity 的 onActivityResult 方法中,导致的结果就是直接到了第一个 Fragment。

实在没想通,不是应该传参进去才会回调吗?

参考:
http://blog.csdn.net/syif88/article/details/50582378

原创粉丝点击