项目结构如图

关键代码如下

strings.xml文件代码如下:

 <?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">ActivityDemo</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="nextView">NextView</string>
<string name="nextViewOnclick">nextViewOnclick</string>
<string name="title_activity_first">FirstActivity</string>
<string name="title_activity_second">SecondActivity</string>
<string name="btnClose">Close</string>
<string name="onCloseClick">onCloseClick</string> </resources>

说明:

string.xml是字符资源文件,用于存放项目中所使用的字符串内容。例如:文本框、按钮等文字内容。

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

activity_first.xml文件代码如下:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".FirstActivity" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> <EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginLeft="18dp"
android:layout_marginTop="18dp"
android:ems="10"
android:inputType="text" > <requestFocus />
</EditText> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText1"
android:layout_below="@+id/editText1"
android:layout_marginTop="63dp"
android:onClick="@string/nextViewOnclick"
android:text="@string/nextView" /> </RelativeLayout>

说明:

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

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

这里需要注意一下按钮的onClick事件是读取string文件中的nextViewOnclick字符串来进行定义的。当然也可以在这里直接定义,不需要到string.xml文件中来读取。暂时不清楚为什么可以这么定义。猜测这种做法可以非常灵活的提供修改。将来可以不用修改java代码,只需要修改这个xml文件就可以达到修改事件的目的。并且提供两种方式来进行事件修改。如果说定义到了string.xml里面的话,还可以根据不同的语言区域来进行事件不同的定义。

FristActivity.java文件代码如下:

 package hqq.steven.activitydemo;

 import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.EditText; public class FirstActivity extends Activity { //窗体创建事件。类似于.NET windows编程中的Form_Load事件。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.first, menu);
return true;
} /**
* 点击下一页按钮事件处理
* @param view
*/
public void nextViewOnclick(View view) {
//创建意图,用于给下个窗体传值
Intent intent = new Intent(this, SecondActivity.class);
//获取当前页面中文本框的值。这种findViewById的做法有点感觉像javascript中的getElementById的感觉。
//在.NET中可以直接通过空间名称来进行直接操作,这里必须要通过这种方式来进行获取该控件。
EditText et = (EditText) this.findViewById(R.id.editText1);
String msg = et.getText().toString().trim();
//将文本框中的内容,压入到意图中去。
intent.putExtra("message", msg); //启动新的活动,设置意图,以及请求编码,该请求编码用于返回时进行识别。
this.startActivityForResult(intent, 2);
} /**
* 处理回传值
* 第二窗体返回值,在此方法中进行处理。
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
// super.onActivityResult(requestCode, resultCode, data);
//比对之前的请求编码,以及核对活动返回的编码是否是Activity.RESULT_OK
if (Activity.RESULT_OK == resultCode && requestCode == 2) {
String result = data.getStringExtra("result");
Log.i("HQQ:>", "Frist-->" + result);
EditText et = (EditText) this.findViewById(R.id.editText1);
//在当前窗体中显示回传的内容。
et.setText(result);
}
}
}

activity_second.xml文件中的代码如下:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".SecondActivity" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="97dp"
android:onClick="@string/onCloseClick"
android:text="@string/btnClose" /> <EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/textView1"
android:layout_marginTop="42dp"
android:ems="10"
android:inputType="text" > <requestFocus />
</EditText> </RelativeLayout>

说明:注意按钮的onclick事件注册采用的是string.xml文件中字符内容。该方式与activity_first.xml中的情况一样。

SecondActivity.java文件中的代码如下:

 package hqq.steven.activitydemo;

 import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView; public class SecondActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second); //获取意图,将前窗体传过来的值进行显示。
Intent intent = this.getIntent();
String msg = intent.getStringExtra("message");
TextView tv = (TextView) this.findViewById(R.id.textView1);
tv.setText(msg);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.second, menu);
return true;
} /**
* 点击关闭按钮时处理方法
* 将本窗体填入的数据通过意图进行返回。
* @param view
*/
public void onCloseClick(View view) {
//获取当前窗体中文本框输入的内容
EditText et = (EditText) this.findViewById(R.id.editText1);
String msg = et.getText().toString().trim();
//将获取的内容压入意图中
Intent intent = this.getIntent();
intent.putExtra("result", msg);
Log.i("HQQ:>", "Seconde-->" + msg); //设置返回结果编号,以及返回的结果
//需要注意的是,该返回的结果编号Activity.RESULT_OK必须与接收窗体的resultCode一致,
//因为该值作为接收窗体判别的标识号。
this.setResult(Activity.RESULT_OK, intent); //窗体结束
this.finish();
} }

Android学习 -- Activity 以及Activity之间值传递的更多相关文章

  1. activity与fragment之间的传递数据

    首先activity之间的数据传递就是 用intent和intent+bundle intent 传递 Intent i= new Intent(MainActivity.this,TheAty.cl ...

  2. android学习四(Activity的生命周期)

    要学好活动(Activity).就必需要了解android中Activity的声明周期.灵活的使用生命周期.能够开发出更好的程序,在android中是使用任务来管理活动的,一个任务就是一组存放在栈里的 ...

  3. android学习笔记27——Activity

    Activity配置==> android应用程序要求所有的应用程序组件都需要进行显示配置后,才可正常使用.包括:Activity.Service.BroadCastReceiver.Conte ...

  4. Android学习整理之Activity篇

    一.Activity概念介绍 activity属于android的四大组件之一(其他的三个: Content provider,Broadcast receiver,Service),它可以理解为一个 ...

  5. Android学习——Fragment与Activity通信(一)

    学会了在Activity中加载Fragment的方法之后,接下来便需要学习Activity和Fragment之间的通信.这一节先学习如何把Activity中的信息传递给Fragment. 基本过程 在 ...

  6. Android学习笔记:Activity生命周期详解

    进行android的开发,必须深入了解Activity的生命周期.而对这个讲述最权威.最好的莫过于google的开发文档了. 本文的讲述主要是对 http://developer.android.co ...

  7. Android学习笔记之Activity详解

    1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...

  8. android学习笔记26——Activity

    Activity ==> android中四大组件:Activity.Service.BroadcastReceiver.ContentProvider Activity组件用于对用户呈现操作界 ...

  9. android学习二(Activity)

    前面我简单的介绍了android的一些基础知识,当作热身吧,接下来接触android的四大组件的activity活动. 1.活动Activity是是一种保护用户界面的组件,主要用于和用户进行交互. 活 ...

随机推荐

  1. STL简洁 && c++读取cfg文件

    在c++工程中,往往需要修改一些变量来实现不同的功能效果,这是cfg文件的使用可以使得工程更加高效与便利,这篇文章介绍的就是c++读取cfg文件的相关内容,以便及时总结和日后回顾. STL即标准模板库 ...

  2. Git for Windows之推送本地版本库到远程仓库

    Git for Windows之基础环境搭建与基础操作中介绍了Git基本环境的构建与基本的操作.生成了一个本地git版本库,本文将介绍如何将这个版本库推送到远程仓库(码云,github也可以). 1. ...

  3. Java多线程-Callable的Future返回值的使用

    一般使用线程池执行任务都是调用的execute方法,这个方法定义在Executor接口中: public interface Executor { void execute(Runnable comm ...

  4. java中this$0 this$1 this$2

    import java.lang.reflect.Field; public class Outer {//this$0 public class FirstInner {//this$1 publi ...

  5. 22-hadoop-hive搭建

    1, hive简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是 ...

  6. KVM:日常管理常用命令

    1.查看.编辑及备份KVM 虚拟机配置文件 以及查看KVM 状态: 1.1.KVM 虚拟机默认的配置文件在 /etc/libvirt/qemu 目录下,默认是以虚拟机名称命名的.xml 文件,如下,: ...

  7. centos7之使用最新版的kubeadm体验k8s1.12.0

    1.环境准备 centos7 .docker-ce18.06.1-ce.kubeadm.kubelet.kubectl 2.安装 yum安装,准备repo文件 docker: [docker-ce-s ...

  8. 【JS点滴】substring和substr以及slice和splice的用法和区别。

    那么就由一道笔试题引入吧,已知有字符串a=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”: var a = "get-el ...

  9. UEFI+GPT与BIOS+MBR各自有什么优缺点?

    1.分区数量上,gpt好像可以支持无限个分区,不过window上只认128个,而且gpt分区不分主分区,逻辑分区,可以理解为全部都是主分区,就相当于可以允许你一个分区一个系统,128个系统了.而这是m ...

  10. HDU 1242 Rescue(BFS+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目描述: Problem Description Angel was caught by t ...