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显示“我回来啦”

  • 相关阅读:
    UE4 Hello World 创建第一个UE4工程
    集团企业数据信息系统建设方案
    Ubuntu_ROS中应用kinect v2笔记
    电力企业计量生产运行系统总体解决方案
    电力企业信息化建设解决方案之计量生产分析系统
    BQ24296充电管理芯片使用过程中的注意事项
    微信测试号开发之四 获取access_token和jsapi_ticket
    微信测试号开发之五 自定义菜单
    微信测试号开发之六 图灵自动回复文本消息
    微信测试号开发之七 获取用户地理位置
  • 原文地址:https://www.cnblogs.com/yangdd/p/13354733.html
Copyright © 2011-2022 走看看