- 浏览: 115416 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
eyeandroid_com:
貌似掉线 写道其实ImageView, ImageButton ...
【Android每日一讲】2012.11.12 设计具有背景图的按钮 - ImageButton的焦点及事件处理 -
貌似掉线:
其实ImageView, ImageButton, Butto ...
【Android每日一讲】2012.11.12 设计具有背景图的按钮 - ImageButton的焦点及事件处理 -
lhw0531:
有推广嫌疑
【史上最全的】Android应用源码免费下载 -
tenderuser:
L_sharp 写道no pic u c a xx没有图片,你 ...
自定义ViewGroup实现ViewPager的滑动效果(附源码下载) -
L_sharp:
no pic u c a xx
自定义ViewGroup实现ViewPager的滑动效果(附源码下载)
根据文档的解释,Activity是Android开发中非常重要的一个基础类。我把它想像成J2ME中的Display类,或者是Win32平台上的Form类,也许不准确,但是它的重要性我觉得应该是一样的(当然,如果我们写的是一个没有界面的应用,例如后台运行的服务之类的,可以不用Display的)。
1. 在一个Activity中使用多个View
如果把Activity看作MVC中的Control?它负责管理UI和接受事件(包括用户的输入),虽然说一个Activity通常对应一个屏幕,但事实上,我们是可以只用一个Activity管理多个不同的View来实现简单的逻辑。
首先,我们增加一个新的资源描述layout/second.xml。
<<?xml version="1.0" encoding="utf-8"?>
<<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
< android:orientation="vertical"
< android:layout_width="fill_parent"
< android:layout_height="fill_parent"
< >
<<TextView id="@+id/txt"
< android:layout_width="fill_parent"
< android:layout_height="wrap_content"
< android:text="Hello 中国"
< />
< <Button id="@+id/go2"
< android:layout_width="wrap_content" android:layout_height="wrap_content"
< android:text="back">
< <requestFocus />
< </Button>
<</LinearLayout>
除了一个“Hello中国”以外,增加一个按钮可以返回前一个界面。然后,在代码中我们要为helloTwo增加两个方法,setViewOneCommand和setViewTwoCommand,分别处理一下在不同界面时,从资源里加载组件并为组件绑定一个事件处理器。
< public void setViewOneCommand()
{
< Button btn = (Button)findViewById(R.id.go);
< btn.setOnClickListener(new View.OnClickListener()
< {
< public void onClick(View v)
< {
< helloTwo.this.setContentView(R.layout.second);
< helloTwo.this.setViewTwoCommand();
<< }
<< });
< Button btnExit=(Button)findViewById(R.id.exit);
<< btnExit.setOnClickListener(new View.OnClickListener(){
< public void onClick(View v){
< helloTwo.this.finish();
<< }
<< });
< }
< public void setViewTwoCommand()
{
< Button btnBack=(Button)findViewById(R.id.go2);
< btnBack.setOnClickListener(new View.OnClickListener(){
<< public void onClick(View v){
< helloTwo.this.setContentView(R.layout.main);
< helloTwo.this.setViewOneCommand();
<< }
<< });
< }
最后,我们需要在onCreate的时候,也就是启动后的main界面上设置一下按钮事件处理器。新的onCreate方法如下:
public void onCreate(Bundle icicle) {
< super.onCreate(icicle);
< setTheme(android.R.style.Theme_Dark);
< setContentView(R.layout.main);
< setViewOneCommand();
< }
编译,运行,OK。
2. 还是回到正道上,多个Activity之间的跳转
Android中提供一个叫Intent的类来实现屏幕之间的跳转,按文档的说法,似乎他们也建议采用这种方法,Intent的用法比较复杂,现在我先看看它最简单的用法。
先在应用中增加两个Activity,这需要修改AndroidManifest.xml文件了,如下:
<<?xml version="1.0" encoding="utf-8"?>
<<manifest xmlns:android="http://schemas.android.com/apk/res/android"
< package="cn.sharetop.android.hello.three">
< <application android:icon="@drawable/icon">
< <activity class=".HelloThree" android:label="@string/app_name">
< <intent-filter>
< <action android:value="android.intent.action.MAIN" />
< <category android:value="android.intent.category.LAUNCHER" />
< </intent-filter>
< </activity>
< <activity class=".HelloThreeB" android:label="@string/app_name">
< </activity>
< </application>
<</manifest>
很简单,就是加一个标签而已,新标签的class是.HelloThreeB,显示的应用标题与前一个Activity一样而已,然后第二步就是修改一个HelloThree类的实现,在onCreate方法中绑定按钮的事件处理器:
public void onCreate(Bundle icicle) {
< super.onCreate(icicle);
< setTheme(android.R.style.Theme_Dark);
< setContentView(R.layout.main);
< setViewOneCommand();
< }
< public void setViewOneCommand()
{
< Button btn = (Button)findViewById(R.id.go);
< btn.setOnClickListener(new View.OnClickListener()
< {
< public void onClick(View v)
<< {
< Intent intent = new Intent();
< intent.setClass(HelloThree.this, HelloThreeB.class);
< startActivity(intent);
< finish();
<< }
<< });
< Button btnExit=(Button)findViewById(R.id.exit);
< btnExit.setOnClickListener(new View.OnClickListener(){
<<< public void onClick(View v){
< HelloThree.this.finish();
<< }
<< });
< }
这里的跳转功能用Intent来操作,它的最简单用法就是用函数setClass()设置跳转前后两个Activity类的实例,然后调用Activity自己的startActivity(intent)即可。最后一句finish()表示将当前Activity关掉(如果不关掉会如何?你可以自己试一下看效果,事实上有时我们是不需要关掉当前Activity的)。
然后,我们同样弄一个Activity类HelloThreeB,代码与前面的差不多,只是将setClass的两个参数反一下,这样就可以简单地实现在两个Activity界面中来回切换的功能了。
3. 如果我想在两个Activity之间进行数据交换,怎么办?
前例中的startActivity()只有一个参数,如果需要向新打开的Activity传递参数,我们得换一个函数了, Android提供了startSubActivity(Intent,int)这个函数来实现这个功能。
函数原型为: public void startSubActivity(Intent intent, int requestCode)
这里的requestCode用来标识某一个调用,一般由我们定义一个常量。
如何把参数传过去呢?Intent类在提供setClass()函数的同时也提供了一个setData()函数。
函数原型为:public Intent setData(ContentURI data)
参数类型是ContentURI,它的详细内容下回再分析,现在就把它当成一个String类型来用吧。
参数带到新的Activity后,同样用Activity.getIntent()函数可以得到当前过来的Intent对象,然后用getData()就取到参数了。
把参数带回来的方法是Activity.setResult(),它有几个形式,现在先看最简单的一个吧。
函数原型是:public final void setResult(int resultCode, String data)
resultCode是返回代码,同样用来标识一个返回类型,而data则是它要返回的参数。
在原来的Activity中的事件处理回调函数onActivityResult,会被系统调用,从它的参数里可以得到返回值。
函数原型为:protected void onActivityResult(int requestCode, int resultCode,String data, Bundle extras)
这里的requestCode就是前面启动新Activity时的带过去的requestCode,而resultCode则关联上了setResult中的resultCode,data是参数,extras也是一个很重要的东西,后面再研究一下它的作用。
下面,我们来看一下代码吧,先看看HelloThree中的代码:
< public void setViewOneCommand()
{
< Button btn = (Button)findViewById(R.id.go);
< btn.setOnClickListener(new View.OnClickListener()
< {
< public void onClick(View v)
< {
< try
< {
< Intent intent = new Intent();
< intent.setClass(HelloThree.this, HelloThreeB.class);
< intent.setData(new ContentURI("One"));
< startSubActivity(intent,REQUEST_TYPE_A);
<< }
<< catch(Exception ex){}
<< }
<< });
< Button btnExit=(Button)findViewById(R.id.exit);
<< btnExit.setOnClickListener(new View.OnClickListener(){
<< public void onClick(View v){
< HelloThree.this.finish();
<< }
<< });
< }
< protected void onActivityResult(int requestCode, int resultCode,
< String data, Bundle extras)
< {
< if (requestCode == REQUEST_TYPE_A) {
<< if (resultCode == RESULT_OK) {
< Log.v(TAG,data);
< TextView txt = (TextView)findViewById(R.id.txt);
< txt.setText(data);
<< }
<< }
< }
这里的REQUEST_TYPE_A是我们定义的一个常量。在onActivityResult中用它与RESULT_OK一起作为条件判断如何处理返回值,这里只是简单将TextView显示值换成传来的字串。
再来看看另一个HelloThreeB类的实现代码:
< private Intent i;
< protected void onCreate(Bundle icicle) {
< super.onCreate(icicle);
< setContentView(R.layout.second);
<
< i = getIntent();
<
< android.util.Log.v(TAG,"onCreate");
< Button btn = (Button)findViewById(R.id.go);
< btn.setOnClickListener(new View.OnClickListener(){
<< public void onClick(View v){
< String result=HelloThreeB.this.i.getData().toString()+" And Two";
< HelloThreeB.this.setResult(RESULT_OK,result);
< finish();
<< }
<< });
<
< TextView v = (TextView)findViewById(R.id.txt);
< v.setText("Param is "+i.getData().toString());
<
< }
在按钮处理事件中,从Intent取出参数,处理一下再用setResult返回给前一个Activity即可。
编译运行即可。
1. 在一个Activity中使用多个View
如果把Activity看作MVC中的Control?它负责管理UI和接受事件(包括用户的输入),虽然说一个Activity通常对应一个屏幕,但事实上,我们是可以只用一个Activity管理多个不同的View来实现简单的逻辑。
首先,我们增加一个新的资源描述layout/second.xml。
<<?xml version="1.0" encoding="utf-8"?>
<<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
< android:orientation="vertical"
< android:layout_width="fill_parent"
< android:layout_height="fill_parent"
< >
<<TextView id="@+id/txt"
< android:layout_width="fill_parent"
< android:layout_height="wrap_content"
< android:text="Hello 中国"
< />
< <Button id="@+id/go2"
< android:layout_width="wrap_content" android:layout_height="wrap_content"
< android:text="back">
< <requestFocus />
< </Button>
<</LinearLayout>
除了一个“Hello中国”以外,增加一个按钮可以返回前一个界面。然后,在代码中我们要为helloTwo增加两个方法,setViewOneCommand和setViewTwoCommand,分别处理一下在不同界面时,从资源里加载组件并为组件绑定一个事件处理器。
< public void setViewOneCommand()
{
< Button btn = (Button)findViewById(R.id.go);
< btn.setOnClickListener(new View.OnClickListener()
< {
< public void onClick(View v)
< {
< helloTwo.this.setContentView(R.layout.second);
< helloTwo.this.setViewTwoCommand();
<< }
<< });
< Button btnExit=(Button)findViewById(R.id.exit);
<< btnExit.setOnClickListener(new View.OnClickListener(){
< public void onClick(View v){
< helloTwo.this.finish();
<< }
<< });
< }
< public void setViewTwoCommand()
{
< Button btnBack=(Button)findViewById(R.id.go2);
< btnBack.setOnClickListener(new View.OnClickListener(){
<< public void onClick(View v){
< helloTwo.this.setContentView(R.layout.main);
< helloTwo.this.setViewOneCommand();
<< }
<< });
< }
最后,我们需要在onCreate的时候,也就是启动后的main界面上设置一下按钮事件处理器。新的onCreate方法如下:
public void onCreate(Bundle icicle) {
< super.onCreate(icicle);
< setTheme(android.R.style.Theme_Dark);
< setContentView(R.layout.main);
< setViewOneCommand();
< }
编译,运行,OK。
2. 还是回到正道上,多个Activity之间的跳转
Android中提供一个叫Intent的类来实现屏幕之间的跳转,按文档的说法,似乎他们也建议采用这种方法,Intent的用法比较复杂,现在我先看看它最简单的用法。
先在应用中增加两个Activity,这需要修改AndroidManifest.xml文件了,如下:
<<?xml version="1.0" encoding="utf-8"?>
<<manifest xmlns:android="http://schemas.android.com/apk/res/android"
< package="cn.sharetop.android.hello.three">
< <application android:icon="@drawable/icon">
< <activity class=".HelloThree" android:label="@string/app_name">
< <intent-filter>
< <action android:value="android.intent.action.MAIN" />
< <category android:value="android.intent.category.LAUNCHER" />
< </intent-filter>
< </activity>
< <activity class=".HelloThreeB" android:label="@string/app_name">
< </activity>
< </application>
<</manifest>
很简单,就是加一个标签而已,新标签的class是.HelloThreeB,显示的应用标题与前一个Activity一样而已,然后第二步就是修改一个HelloThree类的实现,在onCreate方法中绑定按钮的事件处理器:
public void onCreate(Bundle icicle) {
< super.onCreate(icicle);
< setTheme(android.R.style.Theme_Dark);
< setContentView(R.layout.main);
< setViewOneCommand();
< }
< public void setViewOneCommand()
{
< Button btn = (Button)findViewById(R.id.go);
< btn.setOnClickListener(new View.OnClickListener()
< {
< public void onClick(View v)
<< {
< Intent intent = new Intent();
< intent.setClass(HelloThree.this, HelloThreeB.class);
< startActivity(intent);
< finish();
<< }
<< });
< Button btnExit=(Button)findViewById(R.id.exit);
< btnExit.setOnClickListener(new View.OnClickListener(){
<<< public void onClick(View v){
< HelloThree.this.finish();
<< }
<< });
< }
这里的跳转功能用Intent来操作,它的最简单用法就是用函数setClass()设置跳转前后两个Activity类的实例,然后调用Activity自己的startActivity(intent)即可。最后一句finish()表示将当前Activity关掉(如果不关掉会如何?你可以自己试一下看效果,事实上有时我们是不需要关掉当前Activity的)。
然后,我们同样弄一个Activity类HelloThreeB,代码与前面的差不多,只是将setClass的两个参数反一下,这样就可以简单地实现在两个Activity界面中来回切换的功能了。
3. 如果我想在两个Activity之间进行数据交换,怎么办?
前例中的startActivity()只有一个参数,如果需要向新打开的Activity传递参数,我们得换一个函数了, Android提供了startSubActivity(Intent,int)这个函数来实现这个功能。
函数原型为: public void startSubActivity(Intent intent, int requestCode)
这里的requestCode用来标识某一个调用,一般由我们定义一个常量。
如何把参数传过去呢?Intent类在提供setClass()函数的同时也提供了一个setData()函数。
函数原型为:public Intent setData(ContentURI data)
参数类型是ContentURI,它的详细内容下回再分析,现在就把它当成一个String类型来用吧。
参数带到新的Activity后,同样用Activity.getIntent()函数可以得到当前过来的Intent对象,然后用getData()就取到参数了。
把参数带回来的方法是Activity.setResult(),它有几个形式,现在先看最简单的一个吧。
函数原型是:public final void setResult(int resultCode, String data)
resultCode是返回代码,同样用来标识一个返回类型,而data则是它要返回的参数。
在原来的Activity中的事件处理回调函数onActivityResult,会被系统调用,从它的参数里可以得到返回值。
函数原型为:protected void onActivityResult(int requestCode, int resultCode,String data, Bundle extras)
这里的requestCode就是前面启动新Activity时的带过去的requestCode,而resultCode则关联上了setResult中的resultCode,data是参数,extras也是一个很重要的东西,后面再研究一下它的作用。
下面,我们来看一下代码吧,先看看HelloThree中的代码:
< public void setViewOneCommand()
{
< Button btn = (Button)findViewById(R.id.go);
< btn.setOnClickListener(new View.OnClickListener()
< {
< public void onClick(View v)
< {
< try
< {
< Intent intent = new Intent();
< intent.setClass(HelloThree.this, HelloThreeB.class);
< intent.setData(new ContentURI("One"));
< startSubActivity(intent,REQUEST_TYPE_A);
<< }
<< catch(Exception ex){}
<< }
<< });
< Button btnExit=(Button)findViewById(R.id.exit);
<< btnExit.setOnClickListener(new View.OnClickListener(){
<< public void onClick(View v){
< HelloThree.this.finish();
<< }
<< });
< }
< protected void onActivityResult(int requestCode, int resultCode,
< String data, Bundle extras)
< {
< if (requestCode == REQUEST_TYPE_A) {
<< if (resultCode == RESULT_OK) {
< Log.v(TAG,data);
< TextView txt = (TextView)findViewById(R.id.txt);
< txt.setText(data);
<< }
<< }
< }
这里的REQUEST_TYPE_A是我们定义的一个常量。在onActivityResult中用它与RESULT_OK一起作为条件判断如何处理返回值,这里只是简单将TextView显示值换成传来的字串。
再来看看另一个HelloThreeB类的实现代码:
< private Intent i;
< protected void onCreate(Bundle icicle) {
< super.onCreate(icicle);
< setContentView(R.layout.second);
<
< i = getIntent();
<
< android.util.Log.v(TAG,"onCreate");
< Button btn = (Button)findViewById(R.id.go);
< btn.setOnClickListener(new View.OnClickListener(){
<< public void onClick(View v){
< String result=HelloThreeB.this.i.getData().toString()+" And Two";
< HelloThreeB.this.setResult(RESULT_OK,result);
< finish();
<< }
<< });
<
< TextView v = (TextView)findViewById(R.id.txt);
< v.setText("Param is "+i.getData().toString());
<
< }
在按钮处理事件中,从Intent取出参数,处理一下再用setResult返回给前一个Activity即可。
编译运行即可。
发表评论
-
[Android Training视频系列] 8.3 Dealing with Audio Output Hardware
2013-07-19 21:29 757用户在播放音乐的时候 ... -
[Android Training视频系列] 8.2 Managing Audio Focus
2013-07-19 00:20 1169视频讲解:http://www.eyeandroid.com/ ... -
[Android Training视频系列] 8.1 Controlling Your App’s Volume and Playback
2013-07-17 22:26 853主要内容: 1 鉴别使用 ... -
[Android教程]通过Intent分享数据内容给其他应用程序
2013-05-16 07:57 717一:主要内容 本文档首先介绍如何通过发送Intent来分享数据 ... -
[Android Training视频系列] 6.3 Saving Data in SQL Databases(保存数据到SQLite)
2013-05-06 07:54 809一 主要内容 1.概述 2.定义Schema与Contract ... -
[Android Training视频系列] 6.2 Saving Files(保存文件)
2013-02-19 00:11 748一:主要内容 1.概述 2.选择内部存储还是外部存储 3.获取 ... -
【Android您问我讲】Android 2.x中使用actionbar - Actionbarsherlock的使用
2013-01-06 11:34 17051. 范例说明 从Android 3.0开始,Android引 ... -
【Android您问我讲】带左右滑动的选项卡 - ViewPager与Tabhost的结合使用
2013-01-02 00:34 22891. 范例说明 ViewPager实现滑动切换的效果,但是切换 ... -
【Android您问我讲】如何使用选显卡 - Tabhost的使用
2012-12-23 00:40 10991. 范例说明 TabHost是Android系统中提供的一 ... -
[Android Training视频系列]6.1 Saving Key-Value Sets
2012-12-22 10:35 8121.主要内容 本小节介绍S ... -
[Android Training视频系列]2.4 Recreating an Activity
2012-12-18 00:34 9301.主要内容 本讲讲解onSaveInstanceState与 ... -
【Android您问我讲】超炫的左右滑动效果 - ViewPager的使用
2012-12-16 20:45 10511. 范例说明 •android-support-v4.jar ... -
[Android Training视频系列]2.3 Stopping and Restarting an Activity
2012-12-16 13:14 9651.主要内容 本小节介绍onStop与onRestart以及 ... -
[Android Training视频系列]2.2 Pausing and Resuming an Activity
2012-12-14 00:58 10671.主要内容 本讲介绍onPause和onResume,主要分 ... -
[Android Training视频系列]2.1 Starting an Activity
2012-12-13 00:07 9161.主要内容 本小节首先对Activity的各个生命周期作简 ... -
[Android Training视频系列]1.4 Starting Another Activity
2012-12-12 00:29 8831.主要内容 本小结在1.3 ... -
[Android Samples视频系列之ApiDemos] App-Activity-TranslucentBlur和Wallpaper
2012-12-09 23:56 7701.Demo说明与演示 TranslucentBulr :这个 ... -
[Android Samples视频系列之ApiDemos] App-Activity-Translucent
2012-12-05 00:12 8911.Demo说明与演示 该Demo显示一个半透明Activit ... -
[Android Samples视频系列之ApiDemos] App-Activity-SetWallpaper
2012-12-03 00:12 9841.Demo说明与演示 该Demo介绍如何在Android获取 ... -
【Android每日一讲】2012.11.29 自定义下拉菜单模式 - Spinner与setDropDownViewResource
2012-12-01 13:19 11661. 范例说明 Spinner就是下拉菜单,由于手机画面有限, ...
相关推荐
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip 学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip 学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip学习笔记...
【Android学习笔记--Binder】 Binder是Android系统中的核心组件,它是Android系统实现进程间通信(IPC,Inter-Process Communication)的主要方式。Binder机制允许不同进程的组件之间进行数据交换和功能调用,就像...
2、启动activity-显示启动和隐式启动: 3、隐式启动自己的activity 4、获取隐启动传递过来的data数据 5、显示启动传递数据 6、禁用掉横竖屏切换 7、开启activity获取返回值-startActivityForResult:
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
这篇“Android学习笔记--Gson笔记”将深入探讨如何利用Gson来处理JSON数据,提升Android应用的数据解析效率。 一、Gson简介 Gson库能够将Java对象转换成对应的JSON字符串,反之亦然,这使得在Android应用中存储、...
新版Android开发教程&笔记--基础入门一 新版Android开发教程&笔记--基础入门二 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&笔记四--Dalvik ADB 新版Android开发教程+笔记五--模拟器、应用1、2...
本篇“Android学习笔记-- Notifying the User”将深入探讨如何有效地利用通知功能来提升用户体验。 首先,我们要理解Android的通知层次结构。在Android系统中,通知是通过`Notification`类来创建的。这个类包含各种...
### Android入门学习笔记知识点解析 #### 一、HelloWorld与Android SDK - **HelloWorld的重要性**:在软件开发领域,HelloWorld程序被视为一种仪式性的入门程序,用来验证环境配置是否正确,同时也帮助开发者熟悉...
在Android开发中,菜单是构建用户界面不可或缺的部分,它提供了多种操作选项,使得用户能够方便地与应用交互。本文将详细讲解Android中的三种菜单类型:Options Menu、Sub Menu和Context Menu,以及它们的使用和特性...
### 黑马程序员之android学习笔记--用户界面 View(一) #### 一、View与ViewGroup概念解析 在深入探讨Android应用开发时,理解和掌握**View**与**ViewGroup**的概念至关重要。 - **View**: 在Android中,View是...
这篇学习笔记将深入探讨Activity的相关知识,包括创建、声明、启动、关闭以及生命周期管理,同时还会涉及Task和Back Stack的管理。 一、Activity创建: 在Android应用中,Activity的创建通常始于一个Java类,这个类...
Android学习笔记(1)-永远不变的Hello World Android学习笔记(2)-初识Activity Android学习笔记(3)-Activity的生命周期 Android学习笔记(4)-学习Intent的使用,