Android基础——Activity的使用
来源:互联网 发布:小学生预防网络诈骗 编辑:程序博客网 时间:2024/05/18 01:45
1,Activity间的跳转:
这里涉及到了Android中另外一个特别重要的组件 Intent ,就像他的字面意思“意图,打算”一样,我们可以把它理解为我们想要去做的事。例如从ActivityA跳转到ActivityB,系统是怎么知道我们要跳转到ActivityB而不是ActivityC或其他的呢,就是通过 Intent 得知的。
这里涉及到两个Activity,一定要在AndroidManifest.xml文件中声明:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.flyingduck.activitydemo1" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.flyingduck.activitydemo1.ActivityA" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.flyingduck.activitydemo1.ActivityB" > </activity> </application></manifest>
ActivityA.java:
package com.flyingduck.activitydemo1;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class ActivityA extends Activity {private Button skipBtn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_a_layout);skipBtn = (Button) findViewById(R.id.activity_a_skip_btn);skipBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(getApplicationContext(), ActivityB.class);Bundle arguments = new Bundle();arguments.putString("someData", "I'm from Activity A!");intent.putExtras(arguments);startActivity(intent);}});}}
这里Intent通过构造函数显式的指明了要跳转到的Activity。自然还有隐式的跳转方法,后面会涉及到。在ActivityA跳转的时候还绑定了一些数据在Intent中,这里是通过Bundle对象绑定的,Bundle类就像一个Map一样,我们可以将数据的键值对放入其中,在取出的时候就可以很轻易的通过键取到对应的值。当然,如果数据较少的话我们可以采用下面的代码完成数据的传递:
Intent intent = new Intent(getApplicationContext(), ActivityB.class);intent.putExtra(name, value);startActivity(intent);
ActivityB.java
ActivityB的布局也很简单,只有一个用于显示ActivityA传递过来数据的TextView
package com.flyingduck.activitydemo1;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;public class ActivityB extends Activity {private TextView showTxt;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_b_layout);showTxt = (TextView) findViewById(R.id.activity_b_txt);Intent intent = getIntent();Bundle arguments = intent.getExtras();String text = arguments.getString("someData");//String text = intent.getStringExtra("someData");showTxt.setText(text);}}
这里通过getIntent()方法可以得到启动当前Activity的Intent,并从中取得数据。当然,取得方法也有两种,根据你绑定数据时方法而异。在取数据的时候也可以设置默认值:
arguments.getString(key, defaultValue);
效果图如下:
2:启动其他Activity并返回结果:
例子情景:在ActivityA中启动ActivityB,并且当从ActivityB回到ActivityA时,返回一些数据到ActivityA。这样便实现了两个Activity间的通信。
首先是配置文件AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.flyingduck.activitydemo1" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.flyingduck.activitydemo1.ActivityA" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.flyingduck.activitydemo1.ActivityB" > <intent-filter> <action android:name="com.flyingduck.activitydemo1.B_ACTION" /> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> </application></manifest>
可以注意到这里为ActivityB设置了<intent-filter>属性,它在隐式启动ActivityB时会起到作用。
ActivityA.java
为ActivityA的布局添加一个TextView用于接收返回的数据。
package com.flyingduck.activitydemo1;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class ActivityA extends Activity {private Button skipBtn;private TextView showReturnResult;public static final int REQUEST_CODE = 100;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_a_layout);skipBtn = (Button) findViewById(R.id.activity_a_skip_btn);showReturnResult = (TextView) findViewById(R.id.activity_a_txt);skipBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction("com.flyingduck.activitydemo1.B_ACTION");Bundle arguments = new Bundle();arguments.putString("someData", "I'm from Activity A!");intent.putExtras(arguments);startActivityForResult(intent, REQUEST_CODE);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_CODE && resultCode == ActivityB.RESULT_CODE) {String text = data.getExtras().getString("dataFromB");showReturnResult.setText(text);}}}
注意几点:
1,在创建Intent时,我们没有显式的指明要启动哪个Activity,而是设置了Intent的Action,这与在Manifest中Activity设置的action参数很像。这就意味着,当startActivity时,根据这个意图“intent”,去找到最相近的Activity并启动它。这就是Activity的基本概念。intent 及 intent-filter的用法以后会讲到。
2,这里启动ActivityA时用到的是startActivityForResult(),这表示我们想要从启动的Activity中得到返回数据。怎样得到返回的数据呢?我们需要重写onActivityResult(....)方法,参数中有一个Intent类型的data,返回的数据就封装在其中。3,大家可能注意到了两个code,requestCode 和 resultCode。大家不要疑惑,因为在Android应用中可能不止一个Activity以这种方式工作,我们就可以根据requestCode和resultCode来区分此时返回的data是不是属于该Activity的。
ActivityB.java
package com.flyingduck.activitydemo1;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;public class ActivityB extends Activity {private TextView showTxt;public static final int RESULT_CODE = 101;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_b_layout);//取得ActivityA中数据并显示在EditText中showTxt = (TextView) findViewById(R.id.activity_b_txt);Intent intent = getIntent();Bundle arguments = intent.getExtras();String text = arguments.getString("someData");showTxt.setText(text);arguments.clear();//修改取得的数据返回给ActivityAarguments.putString("dataFromB", "I'm from Activity B!");intent.putExtras(arguments);setResult(RESULT_CODE, intent);}}
被启动的ActivityB可以通过setResult(...)将数据返回给启动它的Activity。
效果图:
- Android基础——Activity的使用
- android基础--activity的使用
- #Android学习#Fragment简单基础——Tabbed Activity使用
- Android——Activity基础
- android开发——activity的使用
- Android基础——Activity的四种启动模式
- 【Android基础】Activity深入理解(一)——Activity生命周期
- android基础7——Activity
- Android基础——Activity生命周期
- Android基础——Activity生命周期
- Android应用基础——Activity
- Android基础——Activity生命周期解读
- Android基础学习——Activity生命周期
- Android开发基础第一章——Activity
- Android基础——Activity相关
- Android基础篇——Activity
- Android基础篇——聊聊Activity
- android基础—新建一个Activity
- SysUtils.IsDelimiter - 判断字符串的某个位置是不是指定的字符串
- 兼容IE和Firefox的javascript获取iframe文档内容的变量
- sizeof 与strlen区别
- python-ldap 实例
- 百度贴吧LAMP架构
- Android基础——Activity的使用
- 记录
- Unity插件研究院之ResourceChecker
- C++时间标准库时间time和系统时间的使用
- PCM格式
- 给出一个单链表,不知道节点N的值,怎样只遍历一次就可以求出中间节点,写出算法。
- SysUtils.LastDelimiter - 判断一个字符串在另一个字符串中最后出现的位置
- TF-IDF java实现
- 电商数据应用趋势解读-张沅