android學習筆記3 Intent和Activity

android的Activity直接可以進行跳轉和數據傳遞,就是通過Intent來實現的。

Intent作用有三種,第一種是啓動一個新的Activity。第二種是啓動一個新的Service。第三種是來廣播一個事件。


1.主界面main.xml放兩個按鈕。

首先定義第二個按鈕的監聽器和監聽事件:

//定義一個button2的監聽器
		Button.OnClickListener button2_listener = new Button.OnClickListener() {
			public void onClick(View v){
				setTitle("這是在MainActivity");//觸發這個監聽器的時候,把這個activity的title設置一下
				Intent intent = new Intent();//
				intent.setClass(MainActivity.this, button2Activity.class);//啓動button2Activity
				startActivity(intent);//啓動
			}
		};
		
		Button bt2_button = (Button)findViewById(R.id.button2);//得到bt2_button對象
		bt2_button.setOnClickListener(button2_listener);//設置監聽器

僅僅是啓動一個新的Activity,新的Activity界面裏又有一個button按鈕,點擊後可以再啓動一個Activity。

public class button2Activity  extends ActionBarActivity{
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity2);
		
		
		
		
		Button.OnClickListener button3_listener = new Button.OnClickListener() {
			public void onClick(View v) {
			//	finish();//點擊按鈕,退出
				Intent intent = new Intent(button2Activity.this,button3Activity.class);//啓動另一個Activity,xml文件和button3Activity.java就不具體寫了
				startActivity(intent);
			}
		};
		
		Button button3_button = (Button)findViewById(R.id.button3);
		button3_button.setOnClickListener(button3_listener);
		setTitle("現在是在activity2裏");
	}

}

2.關鍵是這個例子,通過Intent實現Activity間的數據傳遞

定義button1的點擊事件,並設置監聽器:

Button.OnClickListener button1_listener = new Button.OnClickListener() {
			public void onClick(View v){
				Intent intent = new Intent();
				intent.setClass(MainActivity.this, button1Activity.class);
				intent.putExtra("activityMain", "數據來自activityMain");//putExtra()方法是將一組名值對添加到Intent的mExtras變量裏邊。他是一個Bundle類型,類似於HashMap。當新的Activity獲取的時候,通過第一個參數字符串來獲取第二個參數。(成對的映射)
				startActivityForResult(intent,REQUEST_CODE);//用這個函數啓動Activity,當新的Activity結束時,還必須執行原Activity裏的回調函數onActivityResult()。第二個參數是請求碼,請求碼大於0時,當新的Activity結束的時候,這個請求碼被返回到onActivityResult()的參數裏邊。通過請求碼不同在回調 函數裏執行不同的操作。
				//startActivity(intent);//用這個函數啓動Activity的話,不需要執行回調函數,也就是不需要返回結果。
			}
		};
		
		Button bt1_button = (Button)findViewById(R.id.button1);
		bt1_button.setOnClickListener(button1_listener);

新的Activity界面activity1.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:text="TextView" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button4" />

</LinearLayout>

有一個Textview來顯示從主Activity傳過來的數據,還有一個按鈕button4,點擊後返回數據給主Activity

button1Activity.java如下:

public class button1Activity  extends ActionBarActivity{
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity1);
		
		Bundle extras = getIntent().getExtras();//getIntent()方法返回啓動這個Activity的Intent,這裏返回的就是MainActivity裏定義的用來啓動的intent。getExtras()方法返回這個Intent的Bundle類型的變量eExtras。這裏存儲了Intent攜帶的數據,就是從主Activity傳來的數據。
		if(extras != null) {
			String data = extras.getString("activityMain");//名值對 //存儲的數據是名值對存儲的,通過“activityMain”映射獲取對應的數據。
			
			
			TextView textview = (TextView)findViewById(R.id.textView1);
			textview.setText(data);
			setTitle("現在是在Activity1裏::" +data);//顯示在title
		}
		
		
		Button.OnClickListener     button4_listener= new Button.OnClickListener() {
			public void onClick(View v) {
				Bundle bundle = new Bundle();//用於在Intent中攜帶需要返回的數據,定義一下
				bundle.putString("store", "數據來自Activity1");//初始化一下,名值對形式存儲,主Activity可通過“store”獲取第二個參數。
				Intent intent = new Intent();//定義一個新的Intent
				intent.putExtras(bundle);//把存有名值對的bundle放在Intent中
				setResult(RESULT_OK,intent);//第一個參數是結果碼,第二個參數是intent
				finish();//結束當前Activity,就把數據返回給主Activity了
				
			}
		};
		
	Button	button4_button = (Button)findViewById(R.id.button4);
	button4_button.setOnClickListener(button4_listener);
		
	}
	
}

主Activity還有個重要的回調函數處理返回結果


protected void onActivityResult(int requestCode,int resultCode,Intent data) {//處理從新Activiy返回的數據
		if(requestCode == REQUEST_CODE) {//requestCode(請求碼)就是原始Intent當中的requestCode,此例是REQUEST_CODE
			if(resultCode == RESULT_CANCELED) {//resultCode(結果碼)是新的Activity當中的操作是否合法,如果一切正常,那麼返回0,如果出現了什麼問題,就不會返回0。可以構造自己的值,來區分發生了什麼。
				setTitle("取消");
			}
			else if(resultCode == RESULT_OK) {
				String temp = null;
				Bundle extras = data.getExtras();//Intent data就是新的Activity執行完畢返回的Intent,通過getExtras函數來獲取返回的數據
				if(extras != null) {
					temp = extras.getString("store");//通過名值對映射來獲取store映射的值。
				}
				setTitle(temp);//設置爲Title
			}
			
		}
		
		
	}

最後不要忘記在AndroidMainfest.xml文件中註冊新的Activity




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章