源代码下载:http://download.csdn.net/detail/jzp12/4336479
下面示例主要涉及:activity跳转、 intent使用、startActivityForResult/onActivityResult,着重讲解通过Application Context来实现activity之间共享数据
1)主窗口:ActivityExchangeDataActivity
package dongan.hunang.china;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.TextView;
import android.app.Application;
public class ActivityExchangeDataActivity extends Activity {
private Button cBtGoTarget = null;
private Button cBtExit = null;
private EditText cEtText = null;
DataManageClass cDataInstance = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cBtGoTarget = (Button)this.findViewById(R.id.button1);
cBtExit = (Button)this.findViewById(R.id.button2);
cEtText = (EditText)this.findViewById(R.id.editView1);
cBtGoTarget.setOnClickListener(new ButtonListener());
cBtExit.setOnClickListener(new ButtonListener());
cDataInstance = ((DataManageClass)getApplicationContext());
}
private final class ButtonListener implements View.OnClickListener{
public void onClick(View v) {
if(v == cBtGoTarget){
Intent intent = new Intent();
intent.setClass(ActivityExchangeDataActivity.this, TargetActivity.class);
//创建Bundle对象,从TextView获得显示字符并放入键-值对
Bundle mBundle = new Bundle();
mBundle.putString(cDataInstance.getMainStrKey(), cEtText.getText().toString().trim());
//放入Bundle对象
intent.putExtras(mBundle);
//调用startActivityForResult()启动另一个Activity,并要求返回结果
ActivityExchangeDataActivity.this.startActivityForResult(intent, cDataInstance.getRequestCode01());
//startActivity(intent);
}
else if(v == cBtExit)
{
ActivityExchangeDataActivity.this.finish();
}
else{
//
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(cDataInstance.getRequestCode01() == requestCode)
{
switch(resultCode)
{
case Activity.RESULT_OK:
{
//获取 Target Activity返回来的信息
Bundle cBundle = data.getExtras();
String cStrReturn = cBundle.getString(cDataInstance.getTargetStrKey());
//提示用户信息
PromoteMessage(cStrReturn);
}
break;
case Activity.RESULT_CANCELED:
{
//
}
break;
case Activity.RESULT_FIRST_USER:
{
//
}
break;
default:
break;
}
}
else if(cDataInstance.getRequestCode02() == requestCode)
{
//
}
else{
//
}
super.onActivityResult(requestCode, resultCode, data);
}
private void PromoteMessage(String info) {
//吐司提示
Toast toast = Toast.makeText(getApplicationContext(), info, Toast.LENGTH_LONG);
toast.show();
}
}
2)主窗口XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#292C29">
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"
android:text="@string/main_activity" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:inputType="text"
android:layout_below="@+id/textView1"
android:id="@+id/editView1"
/>
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:layout_marginLeft ="20dp"
android:layout_marginRight ="20dp"
android:text="@string/go_target_activity" />
<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_marginTop="10dp"
android:layout_marginLeft ="20dp"
android:layout_marginRight ="20dp"
android:text="@string/exit_from_activity" />
</RelativeLayout>
3)目标窗口:TargetActivity
package dongan.hunang.china;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class TargetActivity extends Activity {
private Button cBtGoMain = null;
private Button cBtExit = null;
private TextView cTvView01 = null;
private TextView cTvView02 = null;
DataManageClass cDataInstance = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.target);
cBtGoMain = (Button)this.findViewById(R.id.button1);
cBtExit = (Button)this.findViewById(R.id.button2);
cTvView01 = (TextView)this.findViewById(R.id.textView1);
cTvView02 = (TextView)this.findViewById(R.id.textView2);
cBtGoMain.setOnClickListener(new ButtonListener());
cBtExit.setOnClickListener(new ButtonListener());
//display receive string from main activity
//使用Application context实现两个activity之间共享变量共享
//getApplicationContext()->
//Return the context of the single, global Application object of the current process.
//get instance
cDataInstance = (DataManageClass)getApplicationContext();
Intent cIntentTmp = TargetActivity.this.getIntent();
Bundle cBundleTmp = cIntentTmp.getExtras();
String cStrRev = cBundleTmp.getString(cDataInstance.getMainStrKey());
//set textview control text
cTvView02.setText(cStrRev);
}
private final class ButtonListener implements View.OnClickListener{
public void onClick(View v) {
if(v == cBtGoMain){
Intent cIntentTmp = TargetActivity.this.getIntent();
Bundle cBundleTmp = cIntentTmp.getExtras();
//merge string and send back to main activity
String cStrRev = cBundleTmp.getString(cDataInstance.getMainStrKey());
String cStrReturn = cTvView01.getText().toString().trim()
+ getResources().getString(R.string.reveive_string_from_main)
+ cStrRev;
Intent cIntent = new Intent();
Bundle cBundle = new Bundle();
cBundle.putString(cDataInstance.getTargetStrKey(), cStrReturn);
//cIntent.setClass(TargetActivity.this, ActivityExchangeDataActivity.class);
cIntent.putExtras(cBundle);
TargetActivity.this.setResult(Activity.RESULT_OK, cIntent);
TargetActivity.this.finish();
}
else if(v == cBtExit)
{
TargetActivity.this.finish();
}
else{
//
}
}
}
}
4)目标窗口XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#292C29">
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"
android:text="@string/target_activity" />
<TextView
android:id="@+id/textView2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:gravity="center_horizontal"
android:background="#ffffff"
android:textColor="#000000"
/>
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_marginTop="10dp"
android:layout_marginLeft ="20dp"
android:layout_marginRight ="20dp"
android:text="@string/go_main_activity" />
<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_marginTop="10dp"
android:layout_marginLeft ="20dp"
android:layout_marginRight ="20dp"
android:text="@string/exit_from_activity" />
</RelativeLayout>
5)Application:DataManageClass
package dongan.hunang.china;
import android.app.Application;
public class DataManageClass extends Application {
private final String cMainStrKey = "MAINACTIVITY";
private final String cTargetStrKey = "TARGETACTIVITY";
private final int nRequestCode_01 = 0x66;
public final int nRequestCode_02 = 0x88;
//使用Application context实现两个activity之间共享变量共享
public String getMainStrKey(){
return cMainStrKey;
}
public String getTargetStrKey(){
return cTargetStrKey;
}
public int getRequestCode01(){
return nRequestCode_01;
}
public int getRequestCode02(){
return nRequestCode_02;
}
}
6)strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, ActivityExchangeDataActivity!</string>
<string name="app_name">ActivityExchangeData</string>
<string name="go_target_activity">前往目的窗口</string>
<string name="go_main_activity">前往主窗口</string>
<string name="main_activity">主窗口</string>
<string name="target_activity">目的窗口</string>
<string name="exit_from_activity">退出窗口</string>
<string name="reveive_string_from_main"> 接收到主窗口如下信息:</string>
</resources>
效果图:
参考:
http://hunankeda110.iteye.com/blog/1290494