天天看點

Android: 用Intent實作Activity之間資料傳遞

程式功能:

使用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;
	}
	
}
           

運作結果:

Android: 用Intent實作Activity之間資料傳遞

跳轉:

Android: 用Intent實作Activity之間資料傳遞

編輯後儲存:

Android: 用Intent實作Activity之間資料傳遞