Android学习 -- Activity 以及Activity之间值传递

项目结构如图

Android学习 -- Activity 以及Activity之间值传递

 

关键代码如下

strings.xml文件代码如下:

 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是字符资源文件,用于存放项目中所使用的字符串内容。例如:文本框、按钮等文字内容。

nextViewOnclick、onCloseClick 是按钮的点击事件名称,在对应下面的activity_frist.xml 、activity_second.xml文件中会看见这两个事件注册。

 

activity_first.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=".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>

说明:

RelativeLayout节点中的属性定义了界面的高度、宽度、间隔边距、以及关联的java文件中的java类(tools:context=".FirstActivity")。类名前面带点,说明是在同一个java包中。如果不在同包中,则需要包名全称。

从上面的代码中可以看出,first页面定义了一个文本框、一个输入文本框、一个按钮。

这里需要注意一下按钮的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 }

 

 

你可能感兴趣的:(Android学习)