Android學習 -- Activity 以及Activity之間值傳遞

項目結構如圖javascript

 

關鍵代碼以下java

strings.xml文件代碼以下:android

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3 
 4     <string name="app_name">ActivityDemo</string>
 5     <string name="action_settings">Settings</string>
 6     <string name="hello_world">Hello world!</string>
 7     <string name="nextView">NextView</string>
 8     <string name="nextViewOnclick">nextViewOnclick</string>
 9     <string name="title_activity_first">FirstActivity</string>
10     <string name="title_activity_second">SecondActivity</string>
11     <string name="btnClose">Close</string>
12     <string name="onCloseClick">onCloseClick</string>
13 
14 </resources>

說明:編程

string.xml是字符資源文件,用於存放項目中所使用的字符串內容。例如:文本框、按鈕等文字內容。windows

nextViewOnclick、onCloseClick 是按鈕的點擊事件名稱,在對應下面的activity_frist.xml 、activity_second.xml文件中會看見這兩個事件註冊。app

 

activity_first.xml文件代碼以下:ide

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".FirstActivity" >
10 
11     <TextView
12         android:id="@+id/textView1"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:text="@string/hello_world" />
16 
17     <EditText
18         android:id="@+id/editText1"
19         android:layout_width="wrap_content"
20         android:layout_height="wrap_content"
21         android:layout_alignLeft="@+id/textView1"
22         android:layout_below="@+id/textView1"
23         android:layout_marginLeft="18dp"
24         android:layout_marginTop="18dp"
25         android:ems="10"
26         android:inputType="text" >
27 
28         <requestFocus />
29     </EditText>
30 
31     <Button
32         android:id="@+id/button1"
33         android:layout_width="wrap_content"
34         android:layout_height="wrap_content"
35         android:layout_alignLeft="@+id/editText1"
36         android:layout_below="@+id/editText1"
37         android:layout_marginTop="63dp"
38         android:onClick="@string/nextViewOnclick"
39         android:text="@string/nextView" />
40 
41 </RelativeLayout>

說明:this

RelativeLayout節點中的屬性定義了界面的高度、寬度、間隔邊距、以及關聯的java文件中的java類(tools:context=".FirstActivity")。類名前面帶點,說明是在同一個java包中。若是不在同包中,則須要包名全稱。編碼

從上面的代碼中能夠看出,first頁面定義了一個文本框、一個輸入文本框、一個按鈕。spa

這裏須要注意一下按鈕的onClick事件是讀取string文件中的nextViewOnclick字符串來進行定義的。固然也能夠在這裏直接定義,不須要到string.xml文件中來讀取。暫時不清楚爲何能夠這麼定義。猜想這種作法能夠很是靈活的提供修改。未來能夠不用修改java代碼,只須要修改這個xml文件就能夠達到修改事件的目的。而且提供兩種方式來進行事件修改。若是說定義到了string.xml裏面的話,還能夠根據不一樣的語言區域來進行事件不一樣的定義。

 

FristActivity.java文件代碼以下:

 

 1 package hqq.steven.activitydemo;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.content.Intent;
 6 import android.util.Log;
 7 import android.view.Menu;
 8 import android.view.View;
 9 import android.widget.EditText;
10 
11 public class FirstActivity extends Activity {
12 
13     //窗體建立事件。相似於.NET windows編程中的Form_Load事件。
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_first);
18     }
19 
20     @Override
21     public boolean onCreateOptionsMenu(Menu menu) {
22         // Inflate the menu; this adds items to the action bar if it is present.
23         getMenuInflater().inflate(R.menu.first, menu);
24         return true;
25     }
26 
27     /**
28      * 點擊下一頁按鈕事件處理
29      * @param view
30      */
31     public void nextViewOnclick(View view) {
32         //建立意圖,用於給下個窗體傳值
33         Intent intent = new Intent(this, SecondActivity.class);
34         //獲取當前頁面中文本框的值。這種findViewById的作法有點感受像javascript中的getElementById的感受。
35         //在.NET中能夠直接經過空間名稱來進行直接操做,這裏必需要經過這種方式來進行獲取該控件。
36         EditText et = (EditText) this.findViewById(R.id.editText1);
37         String msg = et.getText().toString().trim();
38         //將文本框中的內容,壓入到意圖中去。
39         intent.putExtra("message", msg);
40         
41         //啓動新的活動,設置意圖,以及請求編碼,該請求編碼用於返回時進行識別。
42         this.startActivityForResult(intent, 2);
43     }
44 
45     /**
46      * 處理回傳值
47      * 第二窗體返回值,在此方法中進行處理。
48      */
49     @Override
50     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
51         // TODO Auto-generated method stub
52         // super.onActivityResult(requestCode, resultCode, data);
53         //比對以前的請求編碼,以及覈對活動返回的編碼是不是Activity.RESULT_OK
54         if (Activity.RESULT_OK == resultCode && requestCode == 2) {
55             String result = data.getStringExtra("result");
56             Log.i("HQQ:>", "Frist-->" + result);
57             EditText et = (EditText) this.findViewById(R.id.editText1);
58             //在當前窗體中顯示回傳的內容。
59             et.setText(result);
60         }
61     }
62 }

 

activity_second.xml文件中的代碼以下: 

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".SecondActivity" >
10 
11     <TextView
12         android:id="@+id/textView1"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:text="@string/hello_world" />
16 
17     <Button
18         android:id="@+id/button1"
19         android:layout_width="wrap_content"
20         android:layout_height="wrap_content"
21         android:layout_alignLeft="@+id/textView1"
22         android:layout_below="@+id/textView1"
23         android:layout_marginTop="97dp"
24         android:onClick="@string/onCloseClick"
25         android:text="@string/btnClose" />
26 
27     <EditText
28         android:id="@+id/editText1"
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"
31         android:layout_alignLeft="@+id/button1"
32         android:layout_below="@+id/textView1"
33         android:layout_marginTop="42dp"
34         android:ems="10"
35         android:inputType="text" >
36 
37         <requestFocus />
38     </EditText>
39 
40 </RelativeLayout>

說明:注意按鈕的onclick事件註冊採用的是string.xml文件中字符內容。該方式與activity_first.xml中的狀況同樣。

 

SecondActivity.java文件中的代碼以下:

 1 package hqq.steven.activitydemo;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.content.Intent;
 6 import android.util.Log;
 7 import android.view.Menu;
 8 import android.view.View;
 9 import android.widget.EditText;
10 import android.widget.TextView;
11 
12 public class SecondActivity extends Activity {
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_second);
18 
19         //獲取意圖,將前窗體傳過來的值進行顯示。
20         Intent intent = this.getIntent();
21         String msg = intent.getStringExtra("message");
22         TextView tv = (TextView) this.findViewById(R.id.textView1);
23         tv.setText(msg);
24     }
25 
26     @Override
27     public boolean onCreateOptionsMenu(Menu menu) {
28         // Inflate the menu; this adds items to the action bar if it is present.
29         getMenuInflater().inflate(R.menu.second, menu);
30         return true;
31     }
32 
33     /**
34      * 點擊關閉按鈕時處理方法
35      * 將本窗體填入的數據經過意圖進行返回。
36      * @param view
37      */
38     public void onCloseClick(View view) {
39         //獲取當前窗體中文本框輸入的內容
40         EditText et = (EditText) this.findViewById(R.id.editText1);
41         String msg = et.getText().toString().trim();
42         //將獲取的內容壓入意圖中
43         Intent intent = this.getIntent();
44         intent.putExtra("result", msg);
45         Log.i("HQQ:>", "Seconde-->" + msg);
46         
47         //設置返回結果編號,以及返回的結果
48         //須要注意的是,該返回的結果編號Activity.RESULT_OK必須與接收窗體的resultCode一致,
49         //由於該值做爲接收窗體判別的標識號。
50         this.setResult(Activity.RESULT_OK, intent);
51         
52         //窗體結束
53         this.finish();
54     }
55 
56 }
相關文章
相關標籤/搜索