Android开发学习 之 四、Activity

四、Activity

4.1 Activity

Activity是应用程序的入口。负责创建才窗口(setContextView(View)),和用户交互等。

4.1.1 基本用法

首先定义一个类继承自android.app.Activity,在AndroidManifest.xml文件的application标签里声明一个activity即可。

一般一个程序可能会有多个Activity,需要指定程序运行时首先加载的Activity,在activity标签内部需要定义action 和category 。首先运行这个Activity。

一个Activity例子。设置ContentView,获取视图上的按钮,添加事件。

Java代码  

  1. public class ActivityMainExample extends Activity implements View.OnClickListener {
  2. private Button button1;
  3. private Button button2;
  4. private Button button3;
  5. @Override
  6. public void onCreate(Bundle savedInstanceState) {
  7. Log.v(CommonConfig.LOG_TAG, "ActivityExample onCreate");
  8. super.onCreate(savedInstanceState);
  9. super.requestWindowFeature(Window.FEATURE_NO_TITLE);
  10. super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  11. super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  12. super.setContentView(R.layout.main);
  13. this.button1 = (Button) super.findViewById(R.id.button1);
  14. this.button2 = (Button) super.findViewById(R.id.button2);
  15. this.button3 = (Button) super.findViewById(R.id.button3);
  16. this.button1.setOnClickListener(this);
  17. this.button2.setOnClickListener(this);
  18. this.button3.setOnClickListener(this);
  19. }
  20. @Override
  21. public void onClick(View v) {
  22. if (v.equals(this.button1)) {
  23. } else if (v.equals(this.button2)) {
  24. } else if (v.equals(this.button3)) {
  25. }
  26. }
  27. }

AndroidManifest配置。

Xml代码  

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="liming.activity.example"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">
  7. <activity android:name=".ActivityMainExample"
  8. android:label="mainActivity"
  9. android:launchMode="standard">
  10. <intent-filter>
  11. <action android:name="android.intent.action.MAIN" />
  12. <category android:name="android.intent.category.LAUNCHER" />
  13. </intent-filter>
  14. </activity>
  15. </application>
  16. <uses-sdk android:minSdkVersion="7" />
  17. </manifest>

4.1.2 常用设置

AndroidManifest中的通常设置:


android:launchMode


启动模式


standard,singleTop,singleTask ,singleInstance,


android:screenOrientation


屏幕


landscape横屏,portrait竖屏


android:label


标题名称


直接写字符,或引用xml文件中的@string/


android:name


Activity类名


注意.。一般是manifest的package加name等于Activity类带包名的全称

Java常用方法


setContentView()


设置Activity视图


参数可以是①res/layout中的xml文件,通过R.layout获取int的id。②View类型的视图。


findViewById


寻找View,在XML


R中的id。一般设置setContentView为R中的layout,通过这个方法寻找每个组件的引用。

Java其他方法


去标题


super.requestWindowFeature(Window.FEATURE_NO_TITLE)需要在执行setContentView之前操作,否则报错。


全屏


super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);


横竖向


super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);/ ActivityInfo.SCREEN_ORIENTATION_PORTRAIT


屏幕参数widht,height,dpi等


Display display = super.getWindowManager().getDefaultDisplay();

DisplayMetrics displayMetrics = new DisplayMetrics();

display.getMetrics(displayMetrics);

display.getWidth()等方法

displayMetrics.densityDpi等方法

4.1.3 生命周期

Activity有7个生命周期。Activity程序入口为方法onCreate或onStart。一些初始化的操作需要在这两个方法中进行,例如设置layout,初始化控件,添加事件监听等。

每次启动Activity都是从OnCreare开始,接着onStart,onResume。

按Back键就结束程序:onPause,onStop,onDestroy;

按home键切换程序:onPause,onStop,切换回来:onRestart,onStrat,onResume。

在两个以上Activity切换时。Activity是否被Destroy取决于启动模式launchMode。


onCreate


当首次创建Activity时调用。一些设置在该方法中进行:创建视图,数据绑定等。还以Bundle的形式提供以前存储的任何状态的访问。


onRestart


重新启动Activity时调用。该活动仍在内存中,而不是重起一个新的Activity。


onStart


当Activity在屏幕上可见时调用。跟着onResume(),


onResume


当Activity与用户交互时调用。


onPause


在系统启动恢复前一个活动时调用。这通常用于未保存的更改提交到持久性数据、 停止动画和其他可能会占用 CPU 等的东西。此方法的实现必须非常快速,因为此方法返回之前不会恢复的下一个活动。跟或 onResume(),如果活动返回到前面或 onStop(),如果它变得对用户不可见。


onStop


因为另一项Activity已恢复或启动,这个Activity已不再对的用户可见时调用。这可能发生或者因为正在启动一项新的Activity,现有之前的这一个Activity或被销毁。如果这个Activity出错或失败将 onDestroy(),如果被用户重新选中则调用 onRestart()。


onDestroy


Activity被销毁前的最后调用。发生这种情况是因为Activity被finishing (或称为 finish() ,或因为系统暂时销毁此活动的Activity以节省空间。您可以使用 isFinishing() 方法,区分这两种情况。

4.2.4 Activity加载模式

在配置文件中android:launchMode可以进行配置Activity加载模式。四种activity的加载模式:standard,singleTop,singleTask,singleInstance。

1. standard:默认,表示如果需要就创建。这样会导致,切换一次Activity,就创建一个。切换多少次,按back键就会返货多少次。

例如ActivityMain使用standard模式,当他转到ActivityOtherOne,又切换到ActivityMain时,原先在ActivityMain上面的EditText最开始输入的文字也就没有了。

2. singleTop:如果已经有一个这个Activity实例位于Activity栈的顶部时,就不产生新的实例。

3. singleTask: 会在一个新的task 中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。

4. singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task 中,只能有这个activity实例,不能有其他的实例。

4.2 Activity切换

首先简单介绍Intent(意图)。Intent类相当于平台中应用程序之间的通信网络,Intent是一个要执行的操作的抽象说明,相当于各个Activity之间的桥梁。在一个Activity中想切换到另一个Activity,需要使用方法startActivity,并需要定义一个Intent来指定意图的组件类。

4.2.1最简单的Activity切换

定义Intent,使用Intent设置需要切换到哪个Activity。使用Activity的startActivity(Intent)方法。

Java代码  

  1. Intent intent = new Intent(this, ActivityOtherOne.class);
  2. super.startActivity(intent);

4.2.2使用Intent传递数据

当然也可以在切换Activity的时候传递数据。可以直接使用intent的putExtra方法,也可以new一个Bundle传输入,但是需要让intent把bundle进行putExtras下。

传参数端的Activity:

Java代码  

  1. Intent intent = new Intent(this, ActivityOtherOne.class);
  2. Bundle bundle = new Bundle();
  3. bundle.putString("value1", "hello");
  4. intent.putExtras(bundle);
  5. intent.putExtra("value2","world");
  6. super.startActivity(intent);

接收方,例子中的ActivityOtherOne。需要在OnCreate方法中获取。

Java代码  

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. .
  5. .
  6. .
  7. String value1 = super.getIntent().getExtras().getString("value1");
  8. String value2 = super.getIntent().getExtras().getString("value2");
  9. this.myEditText.setText("value1: " + value1 + ", value2: " + value2);
  10. }

4.2.3带回传数据的

1,在主Activitiy(ActivityMainExample)需要使用startActivityForResult方法切换Activity。其中第二个参数requestCode,只有当>= 0,在转会此Activity时才会调用onActivityResult方法,得到回传数据。

ActivityMainExample类中代码

Java代码  

  1. Intent intent = new Intent(this, ActivityOtherOne.class);
  2. Bundle bundle = new Bundle();
  3. bundle.putString("value1", "hello");
  4. intent.putExtras(bundle);
  5. intent.putExtra("value2","world");
  6. super.startActivityForResult(intent, 1);

重写onActivityResult方法,获取回传数据

Java代码  

  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3. String result1 = data.getExtras().getString("result1");
  4. String result2 = data.getExtras().getString("result2");
  5. Log.v(CommonConfig.LOG_TAG, "ActivityExample onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode);
  6. Log.v(CommonConfig.LOG_TAG, "ActivityExample onActivityResult data - result1: " + result1 + ", result2: " + result2);
  7. }

2,在另一个Activity插入回传数据,然后finish。

ActivityOtherTwo类中代码。

Java代码  

  1. @Override
  2. public void onClick(View v) {
  3. super.getIntent().putExtra("result1", "hello android");
  4. super.getIntent().putExtra("result2", "hello google");
  5. super.setResult(Activity.RESULT_OK, super.getIntent());
  6. super.finish();
  7. }

4.3 其他常用的Activity

一些常用的Activity子类,后面将详细说明如何使用。写好后更新链接地址

ActivityGroup http://limingnihao.iteye.com/

TabActivity http://limingnihao.iteye.com/

ListActivity http://limingnihao.iteye.com/

时间: 2024-10-06 18:11:05

Android开发学习 之 四、Activity的相关文章

Android开发学习笔记之Activity属性设置

麦子学院android开发老师说Activity是Android组件中最基本也是最为常见用的四大组件之一,在android开发中运用极为广泛,作为android开发初学者需要熟练掌握,麦子学院android开发老师分享了Activity属性的常用设置. android:allowTaskReparenting 是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务. android:alwaysRetainTaskState 是否保留状态不变, 比如切换回home, 再从新打

Android开发学习之路--Activity之四种启动模式

后天终于可以回家了,马上就要过年了,趁着年底打酱油的模式,就多学习学习,然后记录记录吧.关于Activity已经学习了七七八八了,还有就是Activity的四种启动模式了,它们分别为,standard,singleTop,singleTask,singleInstance,根据名字也差不多可以理解这四种模式了: 1.standard:标准启动模式,默认情况下就是这个模式了,这个模式下启动的Activity会被多次实例化. 2.singleTop:这个模式下启动Activity的话,如果栈顶也是同

android开发学习笔记(三)Activity跳转以及传值

一:步骤: 1创建Intent对象,参数中指定将要跳转到的class 2通过Intent对象的putExtra()方法指定要传到下一个页面的数据.方法参数用键值对. 3通过调用startActivity(Intent intent)方法或者startActivityForResult(Intent intent,int requestCode)方法启动跳转. startActivtyForResult():Activity A跳转到Activity B,Activity B可以返回数据给Acti

android开发学习笔记(二)-activity的生命周期

一:activity的生命周期: 二:created->resumed 当一个应用程序的启动图标被用户点击后,应用程序开始从Activity的onCreate()方法开始执行.(当有多个activity文件时,执行Manifest文件中指定的主activity文件). 当执行完onCreate()方法后,迅速调用onStart(),onResume()方法,用户就可以进行相关的操作. 在onCreate()方法中尽量少执行操作,防止程序运行很久都进入不了界面. 三:Resumed->Pause

【Android开发学习笔记】【第四课】基础控件的学习

通过一个简单的例子来学习下面几种控件: 1.TextView:简单的文本显示控件 2.EditText:可以编辑的文本框 3.Button:按钮 4.Menu:这里指的是系统的Menu 5.Toast:消息提示控件,类似于MFc的tip(不知道理解的对不对) 顺便用到上一次学习的多个Activity之间传递数据的技术,来做一个小的计算乘法的case 步骤: (1)主Activity 和显示结果的 Activity 都采用线性布局,下面是布局文件的源代码: <LinearLayout xmlns:

【Android开发学习】【第二课】Activity学习(1)

什么是Activity,就是我们所看到的 需要理解以下四句话: 1.一个Activity就是一个类,并且这个类需要集成Activity: 2.需要重写OnCreat方法 3.每个Activity都需要在AndroidManifest.xml中进行配置 xml中加入了<intent-filter>说明应用程序启动时先运行这个Activity 4.为Activity添加必要的控件,就可以生成我们想要的界面 在res的layout下的xml就是布局文件 例如这样的: 代码: 效果: [Android

【Android开发学习笔记】【第三课】Activity和Intent

首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activity的布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

【Android开发学习笔记】【第五课】Activity的生命周期-上

今天学习Activity当中的七个生命周期函数: 首先得说一个事情,就是在代码当中如果加入了 System.out.println(" ------");之后,如何查看这里面的输出内容 打开之后只输入“Filter Name”和“by Log Tag” 即可 添加成功后可以看到 本次学习主要总结如下: 1.onCreate() Acitivity首次创建时被调用.用于设置Acitivity的布局文件,绑定按钮监听器等一些普通静态操作. 2.onStart() Acitivity对用户可

android开发学习之路——连连看之游戏逻辑(五)

GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖,程序需要GameService组件包含如下方法.   ·start():初始化游戏状态,开始游戏的方法.     ·Piece[][] getPieces():返回表示游戏状态的Piece[][]数组.     ·boolean hasPieces():判断Pieces[][]数组中是否还剩Piec