Android学习笔记(四)页面跳转与页间传递数据

  在理解了Android中视图文件与代码文件的关系之后,现在来尝试一下在一个App里面建立多个页面。对于App的第一个界面在新建项目的时候IDE就帮我们建立起来的,但是要新增页面的话,则需我们手动去建立,

1、在res的layout文件夹新增新页面的布局文件

2、在src相应的包中新增相应的类文件。重写onCreate方法后,setContentView方法传入R.layout.新布局文件名

3、在AndroidManifest.xml文件中增加新的activity的android:name属性则填入类文件的全名。如果新的页面是程序运行的页面,则要在activity内增加<intent-filter >节点。

  页面跳转用到的是Intent这个类,调转调用的方法是startActivity或者是startActivityForResult。两者的区别在于前者是简单的跳转,后者是有参数返回的跳转。 

  下面则是一个单纯的跳转的核心代码,只展示了对Click事件处理的代码

1             @Override
2             public void onClick(View view) {
3                 Intent intent=new Intent();
4                 intent.setClass(MainActivity.this, steptwopage.class);
5                 startActivity(intent);
6                 finish();
7             }

  首先构造一个Intent对象的实例,调用setClass设置跳转的定向,从当前Activity(在本例中是MainActivity)的this,跳转到目标Activity(本例中的steptwopage)的class中,当然这个设置也可以在Intent的构造函数中实现。最后调用startActivity开始跳转。finish()方法的调用相当于退出当前App。这个方法可有可无,差别就在于跳转到新页面后按“后退”按钮时是返回到上一个页面还是直接退出App。不过实际上还是有返回到上一个页面的,根据我的推断当前线程调用了startActivity方法之后,当前的操作就会被阻塞,当前页面会放到一个运行Activity的栈中,等到新的Activity的操作结束了,才从运行栈中把之前的Activity取出来,继续执行startActivity后面的代码。感觉这个应该跟winPhone的概念类似,这番推断是从winPhone中搬过来的。 

  

 

  带返回值的跳转用的是startActivityForResult方法,它的原型如下

void android.app.Activity.startActivityForResult(Intent intent, int requestCode)

这里调用了方法之后不能用finish(),因为从页面返回来的参数没经过处理,App就从finsih()退出了。如下面代码

1             @Override
2             public void onClick(View view) {
3                 int GET_CODE=0;
4                 Intent intent=new Intent();
5                 intent.setClass(MainActivity.this, steptwopage.class);
6                 startActivityForResult(intent,GET_CODE);
7             }

要对返回的参数进行处理则需要重写onActivity方法,函数原型如下

protected void onActivityResult(int requestCode, int resultCode,   Intent data)

requestCode则是之前调用startActivityForResult时传入的requestCode,resultCode则是从跳转的目标页面传回来的。一般有RESULT_CANCELED,RESULT_OK这些值。下面则是一个重写的示例

复制代码
 1     @Override
 2     protected void onActivityResult(int requestCode, int resultCode,   Intent data)
 3     {
 4         if(requestCode!=GET_CODE)return;
 5         if(resultCode==RESULT_CANCELED)
 6             this.lbResult.setText("RESULT_CANCELED");
 7         else if(data!=null)
 8         {
 9             this.lbResult.setText(data.getAction());
10         }
11
复制代码

那么在目标页面在返回时会做写什么处理呢?在目标页面主要调用了setResult方法,方法的原型如下

void android.app.Activity.setResult(int resultCode, Intent data)

resultCode的值代表了这次返回操作的意义,第二个Intent的对象用来存储返回的值。例如

                     setResult(RESULT_OK,(new Intent()).setAction(GetResultText()));
                     finish();

调用了finish()才能结束当前的Activity,返回到之前的页面。

 

  还有一个就是从当前Acitvity传参到目标页面。在原Activity里面利用Bundle类,调用putString方法设置。例如

复制代码
 1             @Override
 2             public void onClick(View v) {
 3 
 4                 Intent intent=new Intent();
 5                 intent.setClass(steptwopage.this, StepThreePage.class);
 6                 
 7                 Bundle bundle=new Bundle();
 8                 bundle.putString("content", txtNewpw.getText().toString());
 9                 
10                 intent.putExtras(bundle);
11                 
12                 startActivityForResult(intent,0);
13             }
复制代码

然后在目标Activity的onCreate方法里面获取传过来的值,例如

1         content=getIntent().getExtras().getString("content");
2         lbResult.setText(content);
posted @   猴健居士  阅读(550)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示