目录
1.Intent对象的基本概念
1.Intent是Android应用程序组件之一
2.Intent对象在Android系统当中表示一种意图
3.Intent当中最重要的内容是action与data
比如:Intent是一种意图,在现实生活中,我们人也有意图,打篮球、看电影、都是 一种意图,一个意图包含两个重要的内容,action和data,比如打篮球这个动作是action,那么其他一些因素就是data.
2.使用Intent对象传递数据
1.在Activity之间可以通过Intent对象传递数据
2.使用putExtra()系列方法向Intent对象当中存储数据
3.使用getXXXExtra()系列方法从Intent对象当中取数据
例子:
- 我们需要在MainActivity通过一个button,跳转到另一个Activity,在另一个Activity通过intent方法获取到上一个Activity传递过来的数据,和上一节类似:点我查看
- 创建两个Activity和两个布局文件,默认会创建一个名为MainActivity的Activity,和activity_main.xml的布局文件
- 增加一个名为SecondActivity的Activity,名为antivity_second.xml的布局文件
1.首先,新建一个应用程序,命名为:S12_Intent
2.先修改activity_main.xml的布局文件,布局文件的内容,增加一个Button和TextView,
代码如下:
<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=".MainActivity" >
<TextView
android:id="@+id/firstTextViewId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff0000"
android:textSize="20dp"
android:gravity="center"
android:text="这是MainActivity" />
<Button
android:id="@+id/buttonId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="启动SecondActivity"
android:layout_below="@id/firstTextViewId"
android:layout_marginTop="20dp"/>
</RelativeLayout>
3.然后在MainActivity.java中按钮的监听器实现类接口,然后为按钮绑定监听器,在按钮的onClick函数添加跳转函数:
提示:详细解析看上一节
package com.yuan.s12_intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button =(Button)findViewById(R.id.buttonId);
OnButtonListener listener =new OnButtonListener();
button.setOnClickListener(listener);
}
class OnButtonListener implements OnClickListener{
public void onClick(View v) {
//生成意图对象
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
//调用startActivity,启动这个intent,这个意图就是打开另一个Activity
startActivity(intent);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
4.接着,增加一个名为activity_second.xml的布局文件
在activity_second布局文件增加一个TextView控件
5.然后新建名为SendActivity.java的类,去继承Activity,在这个类中复写Activity的onCreate方法
6.修改SecondActivity的onCreate方法,在此方法中调用getIntent方法去获取启动这个Intent对象的Activity
这样我们就可以在第二个Activity中的到启动这个Activity的Intent对象,我们就可以获取启动这个Intent的数据了
提示:使用setContentView(View)来显示指定控件
7.这里注意非常重要的一点,你需要用的Activity必须在Manifest.xml文件里面注册这个Activity,不然当你调用这个Activity时,程序就会报错:
以上我们已经完成了大部分工作,现在我们需要的是让两个Activity使用Intent对象传递数据 .
我们修改MainActivity的onClick函数,修改函数向Intent对象当中存储数据:
存入一个.Age的键,值为:30,这样一来。我们便可在其他的Activity获取到这个值
在SecondActivity中我们可以把Age这个数据通过intent取出来
我们通过intent把数值取出来然后放在这个Activity的TextView当中,怎么做我们已经很清楚了, 刚刚已经有了一个TextView。再定义了一个TextView控件,用来显示获取到的数值:
修改activity_second.xml,程序如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/secondTextViewId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00ff00"
android:textSize="20dp"
android:gravity="center"
android:text="这个SendondActivity"/>
<TextView
android:id="@+id/secondTextViewId2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="age"/>
</LinearLayout>
然后在SecondActivity.java文件中声明引用,获取控件对象,代码如下:
package com.yuan.s12_intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends Activity {
//声明引用
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//使用setContentView(View)来显示指定控件
setContentView(R.layout.activity_second);
//获取代表空间的对象
textView =(TextView)findViewById(R.id.secondTextViewId2);
//生成意图对象
Intent intent = getIntent();
//获取意图对象的数据
int age = intent.getIntExtra("com.yuan.s12_intent.Age", 10);
//显示获取到的值
textView.setText("Age:"+age);
}
}
以上我们已经把代码的部分写好,运行这个应用程序:
可以这是修改,getIntExtra里面的键值,再试试看:
实验结果:
同样我们也可以放入字符串,然后再另一个Activity得到这个数据:
实验结果:
小结:通过Intent我们就可以在Activity之间进行切换,且通过intent的方法可以在Activity之间传递数据,当一个Activity要覆盖下上一个Activity时,可以通过Intent方法把数据传递给下一个Activity.。
附录:
本博文Demo下载:https://github.com/zGuangYuan/Android-
github的用法:点我查看