Activity之间的数据传递和跳转
1.介绍
用于不同Activity之间的数据传递
1.重要方法
clear():清除此Bundle映射中的所有保存的数据。
clone():克隆当前Bundle
containsKey(String key):返回指定key的值
getString(String key):返回指定key的字符
hasFileDescriptors():指示是否包含任何捆绑打包文件描述符
isEmpty():如果这个捆绑映射为空,则返回true
putString(String key, String value):插入一个给定key的字符串值
readFromParcel(Parcel parcel):读取这个parcel的内容
remove(String key):移除指定key的值
writeToParcel(Parcel parcel, int flags):写入这个parcel的内容
二、实例
public class BundleDemo extends Activity {
private EditText etName;
Button btn;
/*
* (non-Javadoc)
*
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.bundle);
etName = (EditText) findViewById(R.id.etname);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String info = etName.getText().toString();
Bundle bundle = new Bundle();
//保存输入的信息
bundle.putString("name", info);
Intent intent=new Intent(BundleDemo.this,BundleDemo1.class);
intent.putExtras(bundle);
finish();
startActivity(intent);
}
});
}
}
public class BundleDemo1 extends Activity {
private TextView etName;
/* (non-Javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.b1);
etName=(TextView)findViewById(R.id.txtname);
Bundle b=getIntent().getExtras();
//获取Bundle的信息
String info=b.getString("name");
etName.setText("您的姓名:"+info);
}
}
三、与SharedPreferences的区别
SharedPreferences是简单的存储持久化的设置,就像用户每次打开应用程序时的主页,它只是一些简单的键值对来操作。它将数据保存在一个xml文件中
Bundle是将数据传递到另一个上下文中或保存或回复你自己状态的数据存储方式。它的数据不是持久化状态。
还有一篇:
一个activity就好比一个网页,此文章讲解怎样创建一个activity并且实现跳转!
一、学习创建Activity
1、新建一个java类,右击src目录,选择new-->class,新的activity需要继承Activity类
2、需要复写onCreate()
例子:
package com.example.testsend;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity2 extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newtest);
}
}
3、配置到AndroidManifext.xml,在application下创建一个新的activity,如果跟MainActivity同一目录,可以只写.name,否则加包名,不过建议写全。
<activity android:name="com.example.testsend.MainActivity2"> </activity>
如果希望新的activity作为首页展示,把intent-filter那一块搬过来就可以了。
二、Activity之间的通信
1、打开一个新的Activity,不传递参数
<Button
android:id="@+id/btnOpen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打开新页面"
android:onClick="OpenNew"
/>
点击按钮触发的方法:
MainActivity.java设置方法
public void OpenNew(View v){
//新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
Intent intent =new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent);
}
2、打开新的Activity并传递参数
MainActivity.java传递参数
public void OpenNew(View v){
//新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
Intent intent =new Intent(MainActivity.this,MainActivity2.class);
//用Bundle携带数据
Bundle bundle=new Bundle();
//传递name参数为tinyphp
bundle.putString("name", "tinyphp");
intent.putExtras(bundle);
startActivity(intent);
}
MainActivity2.java接收参数
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newtest);
//新页面接收数据
Bundle bundle = this.getIntent().getExtras();
//接收name值
String name = bundle.getString("name");
Log.i("获取到的name值为",name);
}
接收成功: