Activity之间传递消息(Intent)

大家都知道一个Activity就是一个手机屏幕页面,通常一个APP中包含大量这样的页面提供给用户交互,那么如何实现不同的Activity之间切换和信息交流呢?本文将以一个简单的例子讲解Activity 的切换和消息传递的方法。细心的读者可能注意到其实标题包含两方面的内容:1.Activity 之间切换  2.Activity之间传递信息。下面就分别讨论如下。


1.Activity之间切换:

Activity 之间切换大体可以分为两类,一种是同一个程序以内的不同Activity之间切换,比如手机QQ登录界面完成信息认证后,启动下一个登录后主界面,这个界面的之间切换始终在QQ一个应用程序之内,也就是同一程序内的Activtity之间切换。还有一种就是不同的应用程序之间的切换,比如你在QQ状态栏看到了JD的产品推广,不小心点击了,这时候程序马上切换到JD手机APP了,这种情况就是不同程序之间的Activity切换.完成不同Activity之间切换的方法有很多,下面主要简单的介绍一下显式调用方法:

  • intent.setClass(this,nextActivity.class);//同一个package 内的不同Activity之间调用
  • intent.setClassName(this,"com.example.xxxx.OtherActivity");
  • intent.setClassName("com.example","com.example.OtherActivity");//打开另外一个APP,其中第一个参数为报名,第二个为类名
  • Component comp = new Component(this,OtherActivity.class);//没有用过
  • intent.setComponent(comp);

2.Activity之间传递消息:
Activity之间传递消息可以通过Bundle类来完成,其数据结构类似于Map,由<key,value>对组成,bundle类提供了常见的string,bool ,int等等数据类型的存储和查询操作,例如setString()和getString()方法分别实现对bundle对象的数值的存储和获取。因此对于不同Activity 之间的数据传输可以通过Bundle完成。在调用方中设置要传递的数值,并将其putExtras到intent中,在被调用Activity中获得bundle中存取的数据即可.

3.搞清楚了以上的两个问题,我们就用一个简单的例子实现不同的Activity之间数据传输吧!
新建两个界面xml文件.用于与用户交互
MainActivity.xml ,主要包括RadionButton按钮用于显示用户的选择,将当前选中的RadioButton内容传递个第二个Activity并在其中显示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.yangchao.datatramsfertoactivity.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/RG_OS"
        android:text="Slect a OS">
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/RG_OS_RB_1"
            android:text="Andorid"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/RG_OS_RB_2"
            android:text="Symbian"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/RG_OS_RB_3"
            android:text="Other"/>
    </RadioGroup>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Submit"
        android:id="@+id/button_submit"
        android:layout_below="@+id/RG_OS"
        android:layout_alignRight="@+id/RG_OS"
        android:layout_alignEnd="@+id/RG_OS" />
</RelativeLayout>

第二个Activity,主要将从MainActivity中的值获得并显示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.yangchao.datatramsfertoactivity.SecondActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Back"
        android:id="@+id/button_back"
        android:layout_gravity="center_horizontal" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textview"/>
</LinearLayout>

在AndroidMainfest.xml文件中注册第二个Activitiy,这样在在Intent调用startActivity时才会找到对应的Activity。
        <activity android:name="com.example.yangchao.datatramsfertoactivity.SecondActivity"
            android:label="SecondActivity">
            

启动Activity 的方法步骤如下:
  • 新建一个Activity
  • 设置调用Activity
  • 启动Intent
  • 关闭当前Activity 将控制权交给调用Activity
对应以上两个xml界面文件的Java控制代码如下:

MainActivity.java
package com.example.yangchao.datatramsfertoactivity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import  android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.RadioGroup;

public class MainActivity extends AppCompatActivity {

    RadioGroup RG_OS;
    RadioButton RG_OS_RB_1,RG_OS_RB_2,RG_OS_RB_3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Button button_submit,button_back;

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RG_OS=(RadioGroup)findViewById(R.id.RG_OS);
        RG_OS_RB_1=(RadioButton)findViewById(R.id.RG_OS_RB_1);
        RG_OS_RB_2=(RadioButton)findViewById(R.id.RG_OS_RB_2);
        RG_OS_RB_3=(RadioButton)findViewById(R.id.RG_OS_RB_3);
        button_submit=(Button)findViewById(R.id.button_submit);
        button_submit.setOnClickListener(new ButtonClickListener());
    }

    class ButtonClickListener implements OnClickListener{
        public  void onClick(View arg0)
        {
            Intent myintent =new Intent();//新建一个Intent 对象系,用于启动第二个activity
            myintent.setClass(MainActivity.this,SecondActivity.class);//设置调用activity类信息

            Bundle mybundle=new Bundle();//新建一个Bundle对象,用于传递Mainactivity中的信息

            if(RG_OS_RB_1.isChecked())
            mybundle.putString("Selected_radioButton",(String)RG_OS_RB_1.getText());
            else if(RG_OS_RB_2.isChecked())
                mybundle.putString("Selected_radioButton",(String)RG_OS_RB_2.getText());
            else if(RG_OS_RB_3.isChecked())
                mybundle.putString("Selected_radioButton",(String)RG_OS_RB_3.getText());
            else
                mybundle.putString("Selected_radioButton",null);

            myintent.putExtras(mybundle);//Intent中加入附带信息
            MainActivity.this.startActivity(myintent);//启动Intent标的的activity
            MainActivity.this.finish();//关闭当前activity
        }
    }
}

SecondActivity.java 主要完成返回主界面和显示主界面传过来的值.
package com.example.yangchao.datatramsfertoactivity;

/**
 * Created by YangChao on 2016/6/18.
 */
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import  android.app.Activity;
import  android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;

public class SecondActivity extends Activity{
    TextView textView;
    Button button_back;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        textView=(TextView)findViewById(R.id.textview);
        button_back=(Button)findViewById(R.id.button_back);
        button_back.setOnClickListener(new ButtonClickListener());
        Intent myinten=this.getIntent();
        Bundle mybundle=myinten.getExtras();
        String getString=mybundle.getString("Selected_radioButton");
        if(getString.equals(null))
            textView.setText("No");
        else
            textView.setText(getString);
    }
    class ButtonClickListener implements OnClickListener{
        public  void onClick(View arg0)
        {
            Intent myintent =new Intent();
            myintent.setClass(SecondActivity.this,MainActivity.class);
            SecondActivity.this.startActivity(myintent);
            SecondActivity.this.finish();

        }
    }
}

运行结果图:




Not:版权所有,转载请注明出处,谢谢!


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值