android编程中如何实现新建activity

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android编程中如何实现新建activity相关的知识,希望对你有一定的参考价值。

 A.创建一个android项目

 

 

B.创建一个新Activity

右键点击Eclipse左边(默认)你要加入Activity的包,比如,我的包是com.INdroid.layout。然后选New->Class,输入类名后(注意首字母大写),在Superclass的Browse那里点击。最后在Choose a type那里输入Activity。然后点OK就可以了.

 

 

C. 创建Activity布局

在rec/layout文件夹里创建布局xml页面 new->others->android->android xml file

 

 

D. 注册创建的activity到AndroidManifest.xml

运用eclisps可以可视化添加,双击AndroidManifest.xml 选择标签application->add->activity ,输入刚才创建 的类名。

 

 

 

也可以手工添加,在</activity>标签下面加入

<activity android:name=".新Activity的名字"

 android:label="新Activity的标题">

</activity>

这里需要注意的是,android:name="."这里有个点,这个点表示这个Activity在我所选择的包com.INdroid.layout下。

5) 在新Activity中加入onCreate方法并且绑定layout。

关于Activity的跳转问题,要补充一点,按钮绑定setOnClickListener必须放在新建OnClickListener对象之后,不然不能跳转。

 

到此,一个可以使用的activity即创建完成了,下一步是添加UI元素及实现页面响应代码

下面以添加一个checkbox为例说明,实现的效果是点击主Activity界面,跳转到CheckboxActivity 界面

1、向主Activity界面添加一个button。打开main..xml,使用outline窗口的“+”,添加一个button,填写button的属性

2、 在src/ActivityMain类,即主Activity的界面响应类中实现页面跳转代码,

2.1 声明 button 变量 和 监听器 OnClickListener

2.2 实现 OnClickListener监听器的跳转逻辑,即onClihck 函数

2-3 绑定 监听器OnClickListener 到 button 中

3、向checkboxActivity界面添加一个 checkbox 的 widget

4、向checkboxActivity界面添加呈现代码

参考技术A

对于Android开发初学者来说,在创建完成安卓版的HelloWorld应用程序后,也并了解了Android项目的文件结构后,接下来的事情应该是想了解一下如何创建一个Activity。如何创建一个Activity?下面简单介绍如何创建一个Activity。

一,创建一个继承自Activity的Java类;

package com.androidwhy;
import android.app.Activity;
import android.os.Bundle;
public class HelloActivity extends Activity 
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

二,Override Activity类中的onCreate方法;

在上面的代码中,你已经看到了,我们必须Override onCreate方法,因这这是一个Activity启动的方法,类似Java中的Main。

三,定义与该Activity使用的Layout文件;

你从上面的代码中也看到了,我们使用了一个叫main的Layout文件。

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="

  android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <EditText android:layout_width="match_parent" android:id="@+id/editText1"
  android:layout_height="wrap_content" android:hint="welcome to android.tgbus.com">
  <requestFocus></requestFocus>
  </EditText>
  <LinearLayout android:layout_width="match_parent"
  android:layout_height="wrap_content" android:id="@+id/linearLayout1">
  <Button android:text="确定" android:id="@+id/okButton"
  android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
  <Button android:text="取消" android:id="@+id/cancleButton"
  android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
  </LinearLayout>
  </LinearLayout>

在该布局文件中,我们定义了一个水平的LinearLayout,在里面放置了一个EditText,同时还放置了另一个水平的LinearLayout,并在其内放置了两个button,一个显示的是“确定”,另一个显示的是“取消”。

四,在AndroidManifest.xml文件中配置Activity;

当上面的步骤完成之后,你的Activity并不能使用,因为是还没有在AndroidManifest.xml(http://www.tiecou.com)中进行配置。

<?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="

  package="com.androidwhy"
  android:versionCode="1"
  android:versionName="1.0">
  <uses-sdk android:minSdkVersion="8" />
  <application android:icon="@drawable/icon" android:label="@string/app_name">
  <activity android:name=".HelloActivity"
  android:label="@string/app_name">
  <intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  </activity>
  </application>
  </manifest>

在这里,我们把HelloActivity配置成了我们的应用启动时就运行的Activity。OK,至此,你的Activity已经创建完成。

参考技术B 在eclipse中线新建项目,再新建包,最后就可以新建activity,其实就是新建一个class,只不过是继承至activity

Android 编程中,为啥设置了 Intent.FLAG

Flag是一些常用的标志,不同的Flag有不同的用途。例如:
FLAG_ACTIVITY_BROUGHT_TO_FRONT
  这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定。

FLAG_ACTIVITY_CLEAR_TOP
  如果设置,并且这个Activity已经在当前的Task中运行,因此,不再是重新启动一个这个Activity的实例,而是在这个Activity上方的所有Activity都将关闭,然后这个Intent会作为一个新的Intent投递到老的Activity(现在位于顶端)中。 例如,假设一个Task中包含这些Activity:A,B,C,D。如果D调用了startActivity(),并且包含一个指向Activity B的Intent,那么,C和D都将结束,然后B接收到这个Intent,因此,目前stack的状况是:A,B。 上例中正在运行的Activity B既可以在onNewIntent()中接收到这个新的Intent,也可以把自己关闭然后重新启动来接收这个Intent。如果它的启动模式声明为“multiple”(默认值),并且你没有在这个Intent中设置FLAG_ACTIVITY_SINGLE_TOP标志,那么它将关闭然后重新创建;对于其它的启动模式,或者在这个Intent中设置FLAG_ACTIVITY_SINGLE_TOP标志,都将把这个Intent投递到当前这个实例的onNewIntent()中。 这个启动模式还可以与FLAG_ACTIVITY_NEW_TASK结合起来使用:用于启动一个Task中的根Activity,它会把那个Task中任何运行的实例带入前台,然后清除它直到根Activity。这非常有用,例如,当从Notification Manager处启动一个Activity。

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
  如果设置,这将在Task的Activity stack中设置一个还原点,当Task恢复时,需要清理Activity。也就是说,下一次Task带着FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前台时(典型的操作是用户在主画面重启它),这个Activity和它之上的都将关闭,以至于用户不能再返回到它们,但是可以回到之前的Activity。 这在你的程序有分割点的时候很有用。例如,一个e-mail应用程序可能有一个操作是查看一个附件,需要启动图片浏览Activity来显示。这个Activity应该作为e-mail应用程序Task的一部分,因为这是用户在这个Task中触发的操作。然而,当用户离开这个Task,然后从主画面选择e-mail app,我们可能希望回到查看的会话中,但不是查看图片附件,因为这让人困惑。通过在启动图片浏览时设定这个标志,浏览及其它启动的Activity在下次用户返回到mail程序时都将全部清除。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
  如果设置,新的Activity不会在最近启动的Activity的列表中保存。

FLAG_ACTIVITY_FORWARD_RESULT
  如果设置,并且这个Intent用于从一个存在的Activity启动一个新的Activity,那么,这个作为答复目标的Activity将会传到这个新的Activity中。这种方式下,新的Activity可以调用setResult(int),并且这个结果值将发送给那个作为答复目标的Activity。

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
  这个标志一般不由应用程序代码设置,如果这个Activity是从历史记录里启动的(常按HOME键),那么,系统会帮你设定。

FLAG_ACTIVITY_MULTIPLE_TASK
  不要使用这个标志,除非你自己实现了应用程序启动器。与FLAG_ACTIVITY_NEW_TASK结合起来使用,可以禁用把已存的Task送入前台的行为。当设置时,新的Task总是会启动来处理Intent,而不管这是是否已经有一个Task可以处理相同的事情。 由于默认的系统不包含图形Task管理功能,因此,你不应该使用这个标志,除非你提供给用户一种方式可以返回到已经启动的Task。 如果FLAG_ACTIVITY_NEW_TASK标志没有设置,这个标志被忽略。

FLAG_ACTIVITY_NEW_TASK
   如果设置,这个Activity会成为历史stack中一个新Task的开始。一个Task(从启动它的Activity到下一个Task中的Activity)定义了用户可以迁移的Activity原子组。Task可以移动到前台和后台;在某个特定Task中的所有Activity总是保持相同的次序。 这个标志一般用于呈现“启动”类型的行为:它们提供用户一系列可以单独完成的事情,与启动它们的Activity完全无关。 使用这个标志,如果正在启动的Activity的Task已经在运行的话,那么,新的Activity将不会启动;代替的,当前Task会简单的移入前台。参考FLAG_ACTIVITY_MULTIPLE_TASK标志,可以禁用这一行为。 这个标志不能用于调用方对已经启动的Activity请求结果。

FLAG_ACTIVITY_NO_ANIMATION
  如果在Intent中设置,并传递给Context.startActivity()的话,这个标志将阻止系统进入下一个Activity时应用Acitivity迁移动画。这并不意味着动画将永不运行——如果另一个Activity在启动显示之前,没有指定这个标志,那么,动画将被应用。这个标志可以很好的用于执行一连串的操作,而动画被看作是更高一级的事件的驱动。

FLAG_ACTIVITY_NO_HISTORY
  如果设置,新的Activity将不再历史stack中保留。用户一离开它,这个Activity就关闭了。这也可以通过设置noHistory特性。

FLAG_ACTIVITY_NO_USER_ACTION
  如果设置,作为新启动的Activity进入前台时,这个标志将在Activity暂停之前阻止从最前方的Activity回调的onUserLeaveHint()。 典型的,一个Activity可以依赖这个回调指明显式的用户动作引起的Activity移出后台。这个回调在Activity的生命周期中标记一个合适的点,并关闭一些Notification。 如果一个Activity通过非用户驱动的事件,如来电或闹钟,启动的,这个标志也应该传递给Context.startActivity,保证暂停的Activity不认为用户已经知晓其Notification。

FLAG_ACTIVITY_REORDER_TO_FRONT
  如果在Intent中设置,并传递给Context.startActivity(),这个标志将引发已经运行的Activity移动到历史stack的顶端。 例如,假设一个Task由四个Activity组成:A,B,C,D。如果D调用startActivity()来启动Activity B,那么,B会移动到历史stack的顶端,现在的次序变成A,C,D,B。如果FLAG_ACTIVITY_CLEAR_TOP标志也设置的话,那么这个标志将被忽略。

FLAG_ACTIVITY_SINGLE_TOP
  如果设置,当这个Activity位于历史stack的顶端运行时,不再启动一个新的。
参考技术A intent.flag主要用于在UI跳转中该activity需要以什么方式进入到系统的堆栈管理中。
常见的flag:
1 FLAG_ACTIVITY_NEW_TASK:
当Intent对象包含这个标记时,系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskActivity,将目标Activity放置于此task。注意,如果同一个应用中Activity的taskAffinity都使用默认值或都设置相同值时,应用内的Activity之间的跳转使用这个标记是没有意义的,因为当前应用task就是目标Activity最好的宿主
2.FLAG_ACTIVITY_CLEAR_TOP:
表示启动的Activity会将Task中位于其上的Activity都强制出栈,使其自身位于栈顶。在Standard模式下,如果原来的Activity栈顺序为 A -> B1 -> D, 此时D通过FLAG_ACTIVITY_CLEAR_TOP启动B,则栈顺序为A -> B2。对于同时设置了FLAG_ACTIVITY_SINGLE_TOP,则栈顺序为 A-> B1(此时回调onNewIntent()..),此时效果与Activity启动模式中的singleTask相同。
3.FLAG_ACTIVITY_SINGLE_TOP:
目前发现与Activity启动模式中的singleTop效果相同

以上是关于android编程中如何实现新建activity的主要内容,如果未能解决你的问题,请参考以下文章

Android创建多个Activity类

android如何finish应用程序通过startActivityForResult打开的activity

Android:如何将以前的 Activity Intent 传递到 Listview

Activity切换效果

Android面试四大组件之Activity

android隐式intent使用场景解析