您的位置:首页 > 移动开发 > Android开发

Android使用意图传递数据的四种方式

2013-05-30 23:13 609 查看
1.使用通用方式传递数据

发送:

Intent intent = new Intent(MainActivity.this,OtherActivity.class);
//在意图中传递数据
intent.putExtra("name", "小明");
intent.putExtra("age", 21);
intent.putExtra("address", "西安");
//启动意图
startActivity(intent);


接收:
Intent intent = getIntent();
int age = intent.getIntExtra("age", 0);
String name = intent.getStringExtra("name");
String address = intent.getStringExtra("address");
2.使用全局变量方式传递数据

设置一个Myapp.java

public class MyApp extends Application {

public String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public MyApp() {
// TODO Auto-generated constructor stub
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
setName("张三");
}


发送:

public void onClick(View v) {
// TODO Auto-generated method stub
myApp = (MyApp)getApplication();
myApp.setName("jack");
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);


接收:

myApp = (MyApp)getApplication();
textView.setText("appName-->" + myApp.getName());
Manifest.xml里

<application
android:name=".MyApp"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.android_app.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".OtherActivity"></activity>
</application>
3.使用剪贴板方式传递
发送:

public void onClick(View v) {
// TODO Auto-generated method stub
//从android系统中调用剪切板的方法
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
String name = "jack";
clipboardManager.setText(name);
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);

接收:

textView = (TextView)this.findViewById(R.id.msg);
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
String msg = clipboardManager.getText().toString();
4.使用剪贴板传递复杂数据

声明一个MyData.java类实现Serializable接口保证其为可序列化的

public class MyData implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public MyData() {

}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public MyData(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "MyData [name=" + name + ", age=" + age + "]";
}
}


发送端:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {

@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
MyData myData = new MyData("xiaoming",21);
ByteArrayOutputStream byteArrayOutputStream =
new ByteArrayOutputStream();
String base64String = "";
try{
ObjectOutputStream objectOutputStream =
new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(myData);
base64String = Base64.encodeToString
(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
objectOutputStream.close();
}catch(Exception e){
}
ClipboardManager clipboardManager = (ClipboardManager)
getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText(base64String);
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
}
});


接收端:

public class OtherActivity extends Activity {
private TextView textView;
public OtherActivity() {
// TODO Auto-generated constructor stub
}
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
textView = (TextView)this.findViewById(R.id.msg);
ClipboardManager clipboardManager =
(ClipboardManager)getSystemService
(Context.CLIPBOARD_SERVICE);
@SuppressWarnings("deprecation")
String msg = clipboardManager.getText().toString();
//将从剪切板中取回的数据还原
byte[] base64_byte = Base64.decode(msg, Base64.DEFAULT);
ByteArrayInputStream byteArrayInputStream =
new ByteArrayInputStream(base64_byte);
try{
ObjectInputStream objectInputStream =
new ObjectInputStream(byteArrayInputStream);
MyData myData = (MyData)objectInputStream.readObject();
textView.setText(myData.toString());
}catch(Exception e){
}
}
}


5.使用静态变量传递数据

接收端:

public class OtherActivity extends Activity {

private TextView textView;
public static String name;
public static int age;
public OtherActivity() {
// TODO Auto-generated constructor stub
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
textView = (TextView)this.findViewById(R.id.msg);
textView.setText
("name-->>"+ name + "\n" + "age-->>" + age);
}
}


发送端:

public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(MainActivity.this,OtherActivity.class);
OtherActivity.age = 21;
OtherActivity.name = "xiaoming";
startActivity(intent);
}
});

6.使用意图传递值返回结果

发送:

package com.example.android_intent_forresult;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
private Button button;
private final static int REQUESTCODE = 1;
private EditText one,two,result;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)this.findViewById(R.id.button);
one = (EditText)this.findViewById(R.id.one);
two = (EditText)this.findViewById(R.id.two);
result = (EditText)this.findViewById(R.id.result);

button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
int a = Integer.parseInt(one.getText().toString());
int b = Integer.parseInt(two.getText().toString());
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
intent.putExtra("a",a);
intent.putExtra("b", b);
startActivityForResult(intent, REQUESTCODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == 2){
if(requestCode == REQUESTCODE){
int three = data.getIntExtra("three", 0);
result.setText(String.valueOf(three));
}
}
}
@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;
}

}


接收:

package com.example.android_intent_forresult;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class OtherActivity extends Activity {

private Button button;
private TextView textView;
private EditText editText;
public OtherActivity() {

}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
button = (Button)this.findViewById(R.id.button2);
textView = (TextView)this.findViewById(R.id.msg);
editText = (EditText)this.findViewById(R.id.three);
Intent intent = getIntent();
int a = intent.getIntExtra("a", 0);
int b = intent.getIntExtra("b", 0);
textView.setText(a + "+" + b + "=" + "?");
button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
Intent intent = new Intent();
int three = Integer.parseInt(editText.getText().toString());
intent.putExtra("three", three);
//通过intent对象返回结果,必须调用setResult方法
setResult(2,intent);
finish();//结束Activity的生命周期

}
});
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: