Activity之间的参数传递
Activity之间和窗口一样,会涉及各种形式的数据交互行为
在Android比较常见的数据交互有以下几种:
1.静态变量共享数据,简单,但是缺点因为是共享数据,所以建议只读,不要修改
2.通过Intent传递,最普遍的方式,没有明显的优缺点
3.通过全局变量来实现数据共享,相对于静态变量共享来说,优缺点是一样,只不过看上去更专业(PRO)
4.带返回的Activity调用,然后Activity结束工作后返回数据,这种方式在特殊状况下必须用到
所有传值和接值都在onCreate()中
通过intent进行Activity之间的参数MainActivity------IntentDataActivity
1.传递一般参数
例如 student对象
传值:
android:name="MyApplication"
只能有一个注册,名字为自定义
传值:
Activity之间和窗口一样,会涉及各种形式的数据交互行为
在Android比较常见的数据交互有以下几种:
1.静态变量共享数据,简单,但是缺点因为是共享数据,所以建议只读,不要修改
2.通过Intent传递,最普遍的方式,没有明显的优缺点
3.通过全局变量来实现数据共享,相对于静态变量共享来说,优缺点是一样,只不过看上去更专业(PRO)
4.带返回的Activity调用,然后Activity结束工作后返回数据,这种方式在特殊状况下必须用到
所有传值和接值都在onCreate()中
通过intent进行Activity之间的参数MainActivity------IntentDataActivity
1.传递一般参数
传值:
Intent intent=new Intent();
intent.setClass(this, IntentDataActivity.class);
intent.putExtra("msg", "这是Intent的数据");
接值:
Intent intent=getIntent();//获取触发当前Activity的意图对象
String msg1=intent.getStringExtra("msg");
2.传递实体例如 student对象
新建一个student.java
package com.example.activitydemo;
import java.io.Serializable;
//Serializable序列化接口
public class Student implements Serializable{
public String name;
public int age;
}
传值:
Student s=new Student();
s.name="张三";
s.age=18;
intent.putExtra("stu", s);
接值:
Intent intent=getIntent();
Student stu=(Student)intent.getSerializableExtra("stu");
String msg ="姓名:"+stu.name+"年龄:"+stu.age);
3.通过bundle传值:传值:
Intent intent=new Intent();
intent.setClass(this, IntentDataActivity.class);
Bundle bundle=new Bundle();
bundle.putString("msg", "这是Bundle的数据");
intent.putExtras(bundle);
接值:
Intent intent=getIntent();
Bundle bundle= intent.getExtras();
String msg2=bundle.getString("msg");
4. 传递bitmap
Intent intent=new Intent(MainActivity.this,TranActivity.class);
intent.putExtra("bitmap", bitmap);
startActivity(intent);
接值:
bitmap=intent.getParcelableExtra("bitmap");
imageview.setImageBitmap(bitmap);
package com.example.activitydemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
public void myClick(View view){
Intent intent=new Intent();
switch(view.getId()){
case R.id.btn;
intent.setClass(this, ResultActivity.class);
startActivityForResult(intent, 1);
return ;
}
startActivity(intent);
}
//回调方法,在Activity返回到当前Activity的时候自动触发
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case 1:
switch(resultCode){
case 200:
String msg=data.getStringExtra("msg");
((TextView)findViewById(R.id.show)).setText(msg);
break;
}
break;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
ResultActivity
package com.example.activitydemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class ResultActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
Button btn=(Button)findViewById(R.id.back);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String msg=((EditText)findViewById(R.id.input)).getText().toString();
Intent intent=new Intent();
intent.putExtra("msg", msg);
setResult(200,intent);
finish();
}
});
}
}
全局变量
AndroidManifest.xml 的application标签中注册android:name="MyApplication"
只能有一个注册,名字为自定义
传值:
MyApplication application=(MyApplication)getApplication();
application.put("hello", "world");
接值:在任何界面的onCreate()方法中
MyApplication application=(MyApplication)getApplication();
String msg=(String)application.get("hello");
带返回的Activity调用,然后Activity结束工作后返回数据,这种方式在特殊状况下用到