两个Activity的通信:
package com.android.ActivityGo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;
public class Activity1 extends Activity {
EditText first,second;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
first = (EditText) findViewById(R.id.first); ///<---this get widget
second = (EditText) findViewById(R.id.second);
///start widget is Button. 这个是Button类,暂时不明白为什么上一次eclipse这里竟然不能识别。
findViewById(R.id.start).setOnClickListener(new OnClickListener(){
public void onClick(View v) {
sendCalculate(); ///当按钮按下时,这里执行。
}
});
}
public void sendCalculate(){
///第一步:把要显示的Activity加载到Intent中。
Intent i = new Intent(this, Activity2.class);
///第二步:创建一个Bundle,同时把要传递的数据放到 Bundle中
Bundle b = new Bundle();
b.putString("first", first.getText().toString());
b.putString("second", second.getText().toString());
///第三步:在传递Intent的时候,顺带这把这个Bundle传递过去,这里用putExtras把他加过来。
i.putExtras(b);
///第四步:开始Activity2并 设置一个请求码,这个requeueCode当这个Activity可以开启多个别的Activity时,用来让onActivityResult识别是哪个!
startActivityForResult(i,10);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data){
switch (resultCode){
case RESULT_OK:
Bundle b = data.getExtras(); ///这里等待别 返回,没有用到requestCode是因为这个例子就启动了一个Activity。
String string = b.getString("CALCULATION");
updateText(string);
}
}
public void updateText(String s){
TextView t = (TextView) findViewById(R.id.text);
t.setText(s);
}
}
333------另一个--------------
package com.android.ActivityGo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
public class Activity2 extends Activity {
String value;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
///这里把Intent中的东西吐出
Intent i = this.getIntent();
Bundle b = i.getExtras();
///检索得到 String
String v1 = b.getString("first");
String v2 = b.getString("second");
value = v1 + v2; ///v1 string ,+ v2 string
findViewById(R.id.reply).setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// TODO Auto-generated method stub
replyCalculation();
}
});
}
public void replyCalculation(){
Intent i = new Intent(); ///这里发送出去,
Bundle b = new Bundle();
b.putString("CALCULATION", value);
i.putExtras(b);
this.setResult(RESULT_OK, i);
this.finish();
}
}
总结:
Bundle用来在多个Activity传递参数。
传递的步骤是:
1在发起的Activity中这样:
///第一步:把要显示的Activity加载到Intent中。
Intent i = new Intent(this, Activity2.class);
///第二步:创建一个Bundle,同时把要传递的数据放到 Bundle中
Bundle b = new Bundle();
b.putString("first", first.getText().toString());
b.putString("second", second.getText().toString());
///第三步:在传递Intent的时候,顺带这把这个Bundle传递过去,这里用putExtras把他加过来。
i.putExtras(b);
///第四步:开始Activity2并 设置一个请求码,这个requeueCode当这个Activity可以开启多个别的Activity时,用来让onActivityResult识别是哪个!
startActivityForResult(i,10);
2在要新建的Activity中这样解析出信息:
Intent i = this.getIntent();
Bundle b = i.getExtras();
///检索得到 String
String v1 = b.getString("first");
String v2 = b.getString("second");
3如果发起者需要 等新建的Activity执行完后返回数据,可以这样重载 protected void onActivityResult(int requestCode, int resultCode,
Intent data)
在其中这样做:{
switch (resultCode){
case RESULT_OK:
Bundle b = data.getExtras(); ///这里等待别 返回,没有用到requestCode是因为这个例子就启动了一个Activity。
String string = b.getString("CALCULATION");
updateText(string);
}
http://forum.ubuntu.com.cn/viewtopic.php?f=74&t=353990
两个Activity的通信:
最新推荐文章于 2023-07-03 01:09:15 发布