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