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 }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。