zoukankan      html  css  js  c++  java
  • Android开发笔记(十五)——Activity的跳转和数据传递

    先新建好两个Activity分别命名为 AActivityBActivity

    显式跳转和隐式跳转

    显式跳转
    示例代码1:(一般采用这种方法)

            mBtnJump.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //显示1
                    Intent intent = new Intent(AActivity.this,BActivity.class);
                    startActivity(intent);
                }
            });
    

    示例代码2:

            mBtnJump.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //显示跳转2
                    Intent intent = new Intent();
                    intent.setClass(AActivity.this,BActivity.class);
                    startActivity(intent);
                }
            });
    

    示例代码3:

            mBtnJump.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //显示跳转3
                    Intent intent = new Intent();
                    intent.setClassName(AActivity.this,"com.example.myapplication.jump.BActivity");
                    startActivity(intent);
                }
            });
    

    示例代码4:

            mBtnJump.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //显示跳转4
                    Intent intent = new Intent();
                    intent.setComponent(new ComponentName(AActivity.this,"com.example.myapplication.jump.BActivity"));
                    startActivity(intent);
                }
            });
    

    隐式跳转

    AndroidManifest.xml 中设置 BActivity</intent-filter> 属性如下:

            <activity android:name=".jump.BActivity"
                android:label="B">
                <intent-filter>
                    <action android:name="com.example.test.BActivity" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
    

    然后在 AActivity.java 中进行隐式跳转的代码编写:其中 setAction 的内容就是在 AndroidManifest.xml 中设置 BActivity</intent-filter> 中的 action

            mBtnJump.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //隐式跳转1
                    Intent intent = new Intent();
                    intent.setAction("com.example.test.BActivity");
                    startActivity(intent);
                }
            });
    

    Activity之间的数据传递

    AActivity 中, bundle 里面放了一些数据,然后把 bundle 放到 intent 中去:

            mBtnJump.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //显示1
                    Intent intent = new Intent(AActivity.this,BActivity.class);
                    Bundle bundle = new Bundle();
                    bundle.putString("name","布丁");
                    bundle.putInt("number",44);
                    intent.putExtras(bundle);                
                    startActivity(intent);
                }
            });
    

    这样 AActivity 就带着 intentintent 中带着数据就传送到了 BActivity 中。

    BActivity 如何接受数据?在 BActivity.java 中的 onCreate 函数中添加:

            mTvTitle=findViewById(R.id.tv_title);
            Bundle bundle = getIntent().getExtras();
            String name = bundle.getString("name");
            int number = bundle.getInt("number");
            mTvTitle.setText(name+','+number);
    

    AActivity通过跳转页面把数据传到的BActivity中的TextView中,这样就实现了两个Activity之间的数据传递。

    startActivityForResult:启动Activity,结束后返回结果

    startActivityForResult :当从AActivity跳转到BActivity中之后,再次返回AActivity,希望从BActivity返回一些数据给AActivity,就可以通过该方法实现。

    把之前的 startActivity(intent); 替换成如下代码: 其中第二个参数是请求码,可以根据请求码来判断是哪一步跳转过去的:

    startActivityForResult(intent,0);
    

    在BActivity中添加一个Button,添加一个点击事件:

            mBtnFinish.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    Bundle bundle1 = new Bundle();
                    bundle1.putString("title","我回来啦");
                    intent.putExtras(bundle1);
                    setResult(Activity.RESULT_OK,intent);
                    finish();
                }
            });
    

    然后就回到了AActivity界面。

    这时候AActivity如何接受BActivity返回的数据?使用 onActivityResult 这个方法。

        @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            Toast.makeText(AActivity.this,data.getExtras().getString("title"),Toast.LENGTH_LONG).show();
        }
    

    这时从BActivity返回AActivity的时候,会弹出一个Toast显示“我回来啦”

  • 相关阅读:
    共创力董事长杨学明先生受邀参加CED智慧大会!
    杨学明老师为华宇金信(北京)软件有限公司提供为期两天的内训服务!
    《互联网敏捷测试管理实践》课程大纲 2018.12.15~16 (上海)
    共创力咨询杨学明老师为国电南瑞提供两天的内训服务!
    《软件测试管理》深圳公开课预告 2018.11.23~24 中南海滨大酒店
    软件测试管理的十大挑战
    对于开发人员修改代码引发新问题的处理措施
    热烈庆祝杨学明老师为上海某著名金融互联网公司提供两天的内训服务!
    《高效的互联网研发项目管理》课程大纲
    《软件测试管理》北京公开课预告 2018.9.28~29
  • 原文地址:https://www.cnblogs.com/yangdd/p/13354733.html
Copyright © 2011-2022 走看看