Android开发入门(五)之界面Activity之间的跳转


在开始读这篇文章之间,介意你先阅读 Android开发入门(四)之界面Activity

Activity之间的跳转分为两种一种是显示的,另一种是隐式跳转,推介使用隐式跳转,不过本文两种都会讲解。

Android开发入门(四)之界面Activity中源码中已包含了显式跳转。

首先在 Android开发入门(四)之界面Activity中已有一个Activity,这里需在再建一个Activity。
第一步:在项目中res/layout/下添加一个display.xml,内容为


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7. <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"  android:id="@+id/DisplayName"/>
  8. </LinearLayout>


第二步:在com.cmath包下添加一个名叫Display的Activity类,Display.java内容为


  1. package com.cmath;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.widget.TextView;
  6. public class Display extends Activity {
  7.     @Override
  8.     public void onCreate(Bundle savedInstanceState) {
  9.         super.onCreate(savedInstanceState);
  10.         setContentView(R.layout.display);
  11.         Intent intent = getIntent();
  12.         Bundle bundle = intent.getExtras();
  13.         TextView text = (TextView) findViewById(R.id.DisplayName);
  14.         text.setText("name:" + bundle.getString("name"));
  15.     }
  16. }


这样一个新的Activity就完成了

因为在该项止中我们在 Android开发入门(四)之界面Activity中已建了一个main的Activity,而这里我们的目的就是为了从main跳到Display中。

在main这个Activity中已有一个id为Submit的Button,当点击这个Button后要跳到Display中。修改main.java的代码为


  1. package com.cmath;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;
  7. import android.widget.EditText;
  8. public class main extends Activity {
  9.     /** Called when the activity is first created. */
  10.     @Override
  11.     public void onCreate(Bundle savedInstanceState) {
  12.         super.onCreate(savedInstanceState);
  13.         setContentView(R.layout.main);
  14.         final EditText name = (EditText) findViewById(R.id.TextName);
  15.         final Button submit = (Button) findViewById(R.id.Submit);
  16.         submit.setOnClickListener(new Button.OnClickListener() {
  17.             @Override
  18.             public void onClick(View v) {
  19.                 Intent intent = new Intent();
  20.                 intent.putExtra("name", name.getText().toString());//添加一些内容,传给Display
  21.                 intent.setClass(v.getContext(), Display.class);//指明要跳转的Activity类
  22.                 startActivity(intent);
  23.             }
  24.         });
  25.     }
  26. }


在上面代码中启动跳转作用的是


  1. intent.setClass(v.getContext(), Display.class);//指明要跳转的Activity类
  2. startActivity(intent);

在intent.setClass方法中指明跳到哪个Activity,v.getContext()指当前的Activity,Display.class指将在跳到的Activity
startActivity(intent) 执行跳转。

下面介绍隐式的跳转,隐式的跳转会出显式的跳转复杂一点,但是会更有用!
首先说到隐式跳转,会使用到ContentProvider。ContentProvider会在以后的文章中说到,这里只是简单说明。
第一步:在com.cmath包下建立CmathProvide.java,内容为:package com.cmath;


  1. import android.content.ContentProvider;
  2. import android.content.ContentValues;
  3. import android.database.Cursor;
  4. import android.net.Uri;
  5. import android.util.Log;
  6. public class CmathProvider extends ContentProvider {
  7.     @Override
  8.     public int delete(Uri arg0, String arg1, String[] arg2) {
  9.         // TODO Auto-generated method stub
  10.         Log.e("fffff", "fffff");
  11.         return 0;
  12.     }
  13.     @Override
  14.     public String getType(Uri uri) {
  15.         return "vnd.cmath.name/vnd.cn.cmath";
  16.     }
  17.     @Override
  18.     public Uri insert(Uri uri, ContentValues values) {
  19.         // TODO Auto-generated method stub
  20.         Log.e("ddddd", "dddd");
  21.         return null;
  22.     }
  23.     @Override
  24.     public boolean onCreate() {
  25.         // TODO Auto-generated method stub
  26.         Log.e("cccc", "ccccc");
  27.         return false;
  28.     }
  29.     @Override
  30.     public Cursor query(Uri uri, String[] projection, String selection,
  31.             String[] selectionArgs, String sortOrder) {
  32.         Log.e("bbbbb", "bbbb");
  33.         return null;
  34.     }
  35.     @Override
  36.     public int update(Uri uri, ContentValues values, String selection,
  37.             String[] selectionArgs) {
  38.         Log.e("aaaa", "bbbb");
  39.         return 0;
  40.     }
  41. }

这些方法很简单,都是Override ContentProvider 的方法,有一定程序经验的一看就知道,这些都是CRUD方法,ContentProvider就是内容管理。

第二步:修改项目根目录下的AndroidManifest.xml文件为:


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.       package="com.cmath"
  4.       android:versionCode="1"
  5.       android:versionName="1.0.0">
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">
  7.      
  8.      <provider android:name="CmathProvider" android:authorities="com.cmath.provider.name"/>
  9.    
  10.         <activity android:name=".main" android:label="@string/app_name">
  11.             <intent-filter>
  12.                 <action android:name="android.intent.action.MAIN" />
  13.                 <category android:name="android.intent.category.LAUNCHER" />
  14.             </intent-filter>
  15.         </activity>
  16.         <activity android:name=".Display">
  17.          <intent-filter>
  18.                 <action android:name="android.intent.action.EDIT" />
  19.                 <category android:name="android.intent.category.DEFAULT" />
  20.                 <data android:mimeType="vnd.cmath.name/vnd.cn.cmath" />
  21.          </intent-filter>
  22.         </activity>
  23.     </application>
  24. </manifest>


第三步:修改main中button的处理事件代码


  1. submit.setOnClickListener(new Button.OnClickListener() {
  2.             @Override
  3.             public void onClick(View v) {
  4.                 Intent intent = new Intent();
  5.                 intent.putExtra("name", name.getText().toString());
  6.                 intent.setAction(Intent.ACTION_EDIT);
  7.                 intent.setData(Uri.parse("content://com.cmath.provider.name/test"));
  8.                 startActivity(intent);
  9.             }
  10.         });


到这里代码修改就完成了。
下面来具体讲解一下整个程序的运行过程。在讲解之前在说明一下,Android的隐式跳转是基于事件的,有系统预定义的,也可以自定义。
首先我们从这个程序开始后按下main中的Button说起。
第一步:按下Button,执行上面onClick方法,在这个方法中初始化Intent,然后调用setAction添加EDIT事件,setData设置Uri。最后调用startActivity。
第二步:当调用startActivity后,一切都Android内部处理了。
               到了这里需在明白AndroidManifest.xml中
 

  1. <provider android:name="CmathProvider" android:authorities="com.cmath.provider.name"/>

这是一个Provider配置:android:name指类名,就是我们建的CmathProvider类(包名在manifest xmlns标签中已指明)
可能到了这里有人已发现

  1. intent.setData(Uri.parse("content://com.cmath.provider.name/test"));

中有内容和android:authorities内容相同,的确

  1. content://com.cmath.provider.name/test

是一个固定格式,以content:// 开始,再加一个Provider的android:authorities,以某个自定义字符结束,就构成了

  1. content://[android:authorities]/[notes]


上面程序中Android会根据content://com.cmath.provider.name/test中的"com.cmath.provider.name"去匹配android:authorities,
就到找到CmathProvider,再调用getType方法。

第三步:getType返回一个"vnd.cmath.name/vnd.cn.cmath“
              再看看activity配置

  1. <activity android:name=".Display">
  2.          <intent-filter>
  3.                 <action android:name="android.intent.action.EDIT" />
  4.                 <category android:name="android.intent.category.DEFAULT" />
  5.                 <data android:mimeType="vnd.cmath.name/vnd.cn.cmath" />
  6.          </intent-filter>
  7. </activity>

根据getType返回的"vnd.cmath.name/vnd.cn.cmath“ 和 intent.setAction(Intent.ACTION_EDIT)可以找到Display这个Activity。这样就可以确定要跳转的Activity,
这就是最简单的隐式跳转。其中有一些配置文件在这里说得不是很清楚,就可以官网上去看看,附件中有源码,可以试试。
 
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值