您的位置:首页 > 其它

[置顶] Activity之间传递消息(Intent)

2016-06-19 17:12 393 查看
大家都知道一个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:版权所有,转载请注明出处,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: