程式功能:
使用Intent傳遞資料、跳轉Activity。兩個Activity元件,Activity1中包含一個TextView和一個Button。當點選Button時,可以啟動Activity2對目前TextView中的内容進行編輯。Activity2的布局界面除了編輯TextView文本資訊的編輯框外,還包含兩個按鈕“儲存”和“放棄”。當單擊“儲存”,Activity2中編輯的文本将傳回Activity1,并更新到Activity1中的TextView中;單擊“放棄”也将傳回Activity1,但之前的編輯操作将被放棄。
MainActivity.java
package org.hq.testIntent;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
private String msg = "";
private EditText editText = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)super.findViewById(R.id.edittext);
editText.setEnabled(false); //設定編輯框不可編輯
Button send_btn = (Button)super.findViewById(R.id.send_btn);
send_btn.setOnClickListener( (OnClickListener) new OnClickListenerImpl() );
}
private class OnClickListenerImpl implements OnClickListener //實作OnClickListener類
{
@Override
public void onClick(View v)
{
Intent intent = new Intent();
msg = editText.getText().toString(); //擷取編輯框中字元串
intent.putExtra("org.hq.testIntent.msg", msg); //向下一個Activity發送編輯框中的字元串,初始化時字元串為空
intent.setClass(MainActivity.this, EditActivity.class);
startActivityForResult(intent,100);//啟動下一個Activity,設定一個請求值100
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==100) //如果一個傳回的Activity的請求值為100,說明是本Activity是調用者
{
EditText tv = (EditText)findViewById(R.id.edittext);
String msg = "";
if ( 20 == resultCode ) //如果子Activity傳回值為20,說明點選了儲存按鈕
{
msg = data.getStringExtra("org.hq.testIntent.msg"); //擷取字元串
tv.setText(msg); //更改編輯框的内容
}
}
}
}
EditActivity.java
package org.hq.testIntent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class EditActivity extends Activity{
private String msg = null;
private EditText et = null;
private Intent intent = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
intent = getIntent();
if ( null != intent )
{
msg = intent.getStringExtra("org.hq.testIntent.msg"); //擷取父Activity傳來的字元串
}
et = (EditText)super.findViewById(R.id.edittext); //事實上這個程式中兩個Activity并不一定要共享同一個編輯框
et.setEnabled(true); //設定編輯框可讀
et.setText(msg); //設定字串内容
Button ok_btn = (Button)super.findViewById(R.id.ok_btn); //擷取确認按鈕
Button return_btn = (Button)super.findViewById(R.id.return_btn); //擷取傳回按鈕
ok_btn.setOnClickListener( (OnClickListener) new OkOnClickListenerImpl() );
return_btn.setOnClickListener( (OnClickListener) new ReturnOnClickListenerImpl());
}
private class ReturnOnClickListenerImpl implements OnClickListener //實作OnClickListener類
{
@Override
public void onClick(View v)
{
Intent intent = new Intent();
setResult(30,intent); //點選取消,不傳回資料
finish(); //本次Activity結束,表面上是兩個Activity互動,實際上子Activity傳回後它的生命周期已經結束了,再次調用是新生成的Activity
}
}
private class OkOnClickListenerImpl implements OnClickListener //實作OnClickListener類
{
@Override
public void onClick(View v)
{
Intent intent = new Intent();
msg = et.getText().toString(); //擷取編輯框中的字元串
intent.putExtra("org.hq.testIntent.msg", msg); //向下一個Activity發送資料
setResult(20,intent);
finish(); //本次Activity結束,表面上是兩個Activity互動,實際上子Activity傳回後它的生命周期已經結束了,再次調用是新生成的Activity
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_edit, menu);
return true;
}
}
運作結果:
跳轉:
編輯後儲存: