启动另外一个Activity_开放一个程序 实现在一个屏幕上显示一个按钮 单击按钮时系统转到另一个activi-程序员宅基地

技术标签: Android开发  Eclipse  Android  

本文译自:http://developer.android.com/training/basics/firstapp/starting-activity.html

本课工程代码下载地址:http://download.csdn.net/detail/fireofstar/4855426

学习完前一课之后,你应该有一个应用程序,它会显示一个带有一个文本域和一个按钮的Activity。在本节课中,你会在MainActivity中添加一些代码,当用户点击Send按钮时,会执行这些代码来启动一个新的Activity。

响应Send按钮点击事件

打开activity_main.xml布局文件,给<Button>元素添加android:onClick属性来响应按钮的on-click事件:

<Button

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"

   android:text="@string/button_send"

android:onClick="sendMessage" />

android:onClick属性值“sendMessage”是你的Activity中的方法名称,当用户点击该按钮时,系统会调用这个方法。

打开MainActivity类(在src/目录中),添加对应的方法:

/** Called when the user clicks the Send button */

public void sendMessage(View view) {

   // Do something in response to button

}

这会要求你导入View类:

import android.view.View;

提示:在Eclipse中,按下Ctrl+Shift+O组合键导入缺少的类(在Mac电脑上是Cmd+Shift+O组合键)。

为了让系统找到跟android:onClick属性所指定方法名相匹配的方法,代码中的方法必须遵循以下规则:

1. 必须是public类型;

2. 要有一个void类型的返回值;

3. 要只有一个View类型的参数(该View参数是用户点击的那个View对象)

接下来,你会在这个方法中编写读取文本域内容,并把该文本内容发送给另一个Activity的代码。

构建一个Intent对象

一个Intent是一个对象,它提供了分离组件间的运行时绑定(如两个Activity)。Intent对象代表了一个应用程序要做某些事情的意图。Intent的应用范围很宽,但大多数的时候会用于启动另外一个Activity

sendMessage()方法内,创建一个用于启动名叫DisplayMessageActivityActivityIntent对象:

Intent intent=newIntent(this,DisplayMessageActivity.class);

上述构造器需要两个参数:

1. 第一个参数是Context类型(因为Activity类是Context类的子类,所以这里使用this);

2. 第二个参数是Class类型,它指向一个应用程序组件,系统会把Intent对象发送给这个应用程序组件(在本例中,该Activity应该被启动)。

注意:如果你使用一个IDE环境,那么对DisplayMessageActivity的引用会产生一个错误,因为这个类还不存在。先忽略这个错误,一会儿我们会创建这个类。

Intent不仅允许启动另外一个Activity,而且还可以携带数据包。在sendMessage()方法内,使用findViewById()方法来获得EditText元素,并把它的文本值添加给Intent对象:

Intent intent = new Intent(this, DisplayMessageActivity.class);

EditText editText = (EditText) findViewById(R.id.edit_message);

String message = editText.getText().toString();

intent.putExtra(EXTRA_MESSAGE, message);

注意:你需要引入android.content.Intent和android.widget.EditText类。还要定义一个EXTRA_MESSAGE常量。

Intent对象可以用被叫做key-valueextras来携带各种类型的数据集合。putExtra()方法的第一个参数是键名称,第二个参数是值。

为了让下一个Activity能够查询到附加的数据,你应该使用public常量来定义Intent附加数据的键名。因此要在MainActivity类的顶部来定义EXTRA_MESSAGE常量:

public class MainActivity extends Activity {

   public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";

   ...

}

通常,使用应用程序包名来作为Intent附加数据的键名常量定义的前缀,是一个良好的习惯,这样会保证它们的唯一性。

启动第二个Activity

调用带有Intent参数的startActivity()方法来启动Activity。系统会接收这个调用,并启动Intent对象所指定的Activity的实例。

以下是Send按钮所涉及到的完整的sendMessage()方法:

/** Called when the user clicks the Send button */

public void sendMessage(View view) {

   Intent intent = new Intent(this, DisplayMessageActivity.class);

   EditText editText = (EditText) findViewById(R.id.edit_message);

   String message = editText.getText().toString();

   intent.putExtra(EXTRA_MESSAGE, message);

   startActivity(intent);

}

创建第二个Activity

以下是使用Eclipse创建一个新的Activity的步骤:

1. 点击工具栏中New按钮

2. 在弹出的窗口中,打开Android文件夹,并选择Android Activity。点击Next按钮;

1.Eclipse中的新Activity向导。

3. 选BlankActivity,并点击Next按钮;

4. Activity明细中填写以下信息:

    A. Project:MyFirstApp

    B. Activity Name:DisplayMessageActivity

    C. Layout Name:activity_display_message

    D.Title:My Message

    E. Hierarchial Parent:com.example.myfirstapp.MainActivity

    F. Navigation Type:None

点击Finish按钮。

如果你使用不同的IDE或命令行工具,就要在src/目录中创建一个新的名叫DisplayMessageActivity.java的类文件。

如果你使用Eclipse来创建这个Activity,那么请打开这个DisplayMessageActivity.java文件:

1. 这个类已经包含了所要求的onCreate()方法的一个实现;

2. 还有一个onCreateOptionsMenu()方法实现,但在本应用程序中不使用这个方法,因此你可以删除它。

3. 还有一个onOptionsItemSelected()方法的实现,它会处理操作栏的up行为,请保留该方法。

以下是这个类的代码:

public class DisplayMessageActivity extends Activity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_display_message);

       // Show the Up button in the action bar.

       getActionBar().setDisplayHomeAsUpEnabled(true);

   }

   @Override

   public boolean onOptionsItemSelected(MenuItem item) {

       switch (item.getItemId()) {

       case android.R.id.home:

           NavUtils.navigateUpFromSameTask(this);

           return true;

       }

       return super.onOptionsItemSelected(item);

   }

}

如果你使用的是Eclipse以外的IDE,就要使用上面的代码来更新你的DisplayMessageActivity类。

所有的Activity的子类都必须实现onCreate()方法。系统会在创建该Activity实例的时候调用这个方法。这个方法是你必须用setContentView()方法定义Activity布局的位置,并且也是初始化该Activity组件的位置。

注意:如果你使用不是Eclipse的IDE,那么你的工程不会包含setContentView()方法所要求的activity_display_message布局文件。在本例中,不会有问题,因为稍后更新了onCreate()方法后,就会不使用这个布局文件了。

添加标题字符串

如果你使用Eclipse,你可以跳过下一节,因为模板会给这个新的Activity提供标题字符串。

否则,把新的Activity的标题添加到strings.xml文件中:

<resources>

   ...

   <string name="title_activity_display_message">My Message</string>

</resources>

把这个Activity添加到清单中

所有的Activity都必须在你的清单(AndroidManifest.xml)中使用<activity>元素来声明。

当你使用Eclipse工具来创建这个Activity时,它会创建一个默认的实体。否则,你需要把以下内容添加到清单文件中:

<application ... >

   ...

   <activity

       android:name="com.example.myfirstapp.DisplayMessageActivity"

       android:label="@string/title_activity_display_message"

       android:parentActivityName="com.example.myfirstapp.MainActivity" >

       <meta-data

           android:name="android.support.PARENT_ACTIVITY"

           android:value="com.example.myfirstapp.MainActivity" />

   </activity>

</application>

android:parentActivityName属性声明这个Activity的父Activity的名称。系统使用这个值来实现默认的导航行为,如Android4.1API Level 16)以上版本中的Up导航。通过使用支持类库,并添加像上面那样的<meta-data>元素,你可以给较低的Android版本提供相同的导航行为。

注意:你的Android SDK应该已经包含了最新的Android支持类库,包括捆绑的ADT,但是如果你使用的是不同的IDE,你应该在添加平台和包的时候完成对它的安装。在使用Eclipse中的模板的时候,支持类库会自动的添加到你的应用程序的工程中(在Android Dependencies中你可以看到类库的JAR文件)。如果你没有使用Eclipse,你就需要手动的把类库添加给你的工程---按照建立支持类库指南来做,然后返回。

如果你在使用Eclipse来进行开发,现在就可以运行你的应用程序了,但是不会有什么特别的发生。点击Send按钮启动第二个Activity,但是他会使用模板提供的默认的“Hello world”模板。一会儿你会更新这个Activity来替换这个定制的文本View的显示,因此如果你使用的是不同的IDE,那么就不要担心依然还不能编译的应用程序。

接收Intent

每个由Intent调用的Activity,不管你是如何导航到那儿的,你都可以通过调用getIntent()方法来获得启动你Activity的那个Intent对象,并且获得包含其中的数据。

DisplayMessageActivity类的onCreate()方法中,获得由MainActivity发送的Intent对象并提取其中的消息:

Intent intent = getIntent();

String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

显示消息

创建一个TextView,并使用setText()方法给它设置文本来把消息显示在屏幕上。然后通过setContentView()方法把TextView作为这个Activity的根View添加到布局中。

以下是DisplayMessageActivity类的onCreate()方法的完整代码:

@Override

public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   // Get the message from the intent

   Intent intent = getIntent();

   String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

   // Create the text view

   TextView textView = new TextView(this);

   textView.setTextSize(40);

   textView.setText(message);

   // Set the text view as the activity layout

   setContentView(textView);

}

现在运行这个应用程序,在打开时,在文本域中键入消息,然后点击Send按钮,就会看到显示消息的第二个Activity。

2.运行在Android4.0上的应用中的两个Activity


文章转自:http://blog.csdn.net/think_soft/article/details/8267089

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/deathmonkey/article/details/10111673

智能推荐

安装matlab2021b之后电脑启动变慢&&matlab启动很慢以及初始化时间过长_matlab启动要几分钟的原因-程序员宅基地

文章浏览阅读2.2w次,点赞16次,收藏87次。安装matlab2021b之后电脑启动变慢&&matlab初始化时间过长原因及解决方法_matlab启动要几分钟的原因

Android使用poi生成docx文件,插入图片_android xwpfrun-程序员宅基地

文章浏览阅读2.7k次。//创建图片(直接写一个类继承XWPFDocument,增加如下方法)public void createPicture(int id, int width, int height, XWPFParagraph paragraph) { final int EMU = 9525; width *= EMU; height *= EMU; ..._android xwpfrun

codeforces 548B-程序员宅基地

文章浏览阅读41次。B. Mike and Funtime limit per test:2 secondsmemory limit per test:256 megabytesinput:standard inputoutput:standard outputMike and some bears are playing a game jus...

推荐 :如何用XGBoost做时间序列预测?-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏13次。作者:Jason Brownlee. 翻译:wwl. 校对:王雨桐本文约3300字,建议阅读10分钟本文介绍了如何用XGBoost做时间序列预测,包括将时间序列转化为有监督学习的..._深度学习算法在时间序列预测中的应用,如xgboost

iOS 微博简单分享_微博分享 ios-程序员宅基地

文章浏览阅读5.2k次。一、先建立Xc_微博分享 ios

DevExpress汉化方法详解(附资源)_devexpress universal 21.1汉化-程序员宅基地

文章浏览阅读6.9k次,点赞4次,收藏8次。网上看到很多朋友在查找DevExpress的汉化包,在此提供给大家步骤如下: > + 下载汉化包:http://download.csdn.net/download/endlessseaofcrow/9988928 + 把zh-Hans文件夹放在VS创建的项目~bin/debug目录下; +_devexpress universal 21.1汉化

随便推点

Spring -12 -声明式事务及完整的XML配置文件信息 -声明式事务中的相关属性(tx:advice的标签)...-程序员宅基地

文章浏览阅读138次。1.编程式事务:1.1由程序员编程事务控制代码.  1.2OpenSessionInView 就属于编程式事务: session.commit()和rollback()2.声明式事务:   2.1事务控制代码已经由spring 写好.程序员只需要声明出哪些方法需要进行事务控制和如何进行事务控制.3.声明式事务都是针对于ServiceImpl 类下方法的. 4.事务管理器基..._normal.xml中mandatory

【震惊】广东阳江一官员因斗嘴锤杀妻子分尸63块-程序员宅基地

文章浏览阅读324次。周腾越夫妇的结婚照。陈沵橦/制图幸福家庭表象下猝发的骇人凶案警方称家庭纠纷酿惨剧;凶手一审被判死缓,女方家属对判决不满■新快报记者 吴笋林/文图“她骂我没用,还不如嫁给其他有钱人。”周腾越反唇相讥,夫妻俩就动起手来。“当时她头上已经出血了,还用手抓着我的衣服,我又连续打了几下,她就倒在地上了。”周腾越瘫坐在地上,从妻子的裤袋中取出手机关机。“她说的话让我很气愤,我当时已经控制不住自己。”11月24...

鸿蒙2.0公测版支持机型,华为鸿蒙2.0公测版推送,OTA支持机型有这些-程序员宅基地

文章浏览阅读170次。华为鸿蒙2.0系统测试版推送,你升级了吗?是的华为鸿蒙2.0系统公测版终于在4月底推送升级更新了,而且根据爆料网友的反馈来看是多款华为智能手机都推送了升级更新。华为鸿蒙2.0系统公测版升级更新包不同机型大小不一,有2GB左右,5GB左右甚至是6GB多的。当然这次推送的依然是开发者测试版升级更新,不过条件并没有那么苛刻,有网友表示即使不是开发者也可以申请华为鸿蒙2.0系统公测版升级更新,而且现在也接..._鸿蒙2内测招募机型

Python基础知识(十)2021.2.8_需要用import导入的函数是内置函数吗-程序员宅基地

文章浏览阅读235次。模块化编程理念模块化编程的流程模块导入import加载底层原理包的概念和创建包和导入包包的本质和init文件sys.path和模块搜索路径详解模块的本地发布_模块的安装PyPI官网_远程上传和管理模块_PIP方式安装模块..._需要用import导入的函数是内置函数吗

将mysql表结构导出到Excel,方便数据设计文档使用_mysql表结构整理成excel 快捷方便-程序员宅基地

文章浏览阅读1.1w次,点赞4次,收藏8次。方法一:1.使用一个MySQL管理工具:SQLyog,点击菜单栏“数据库”下拉的最后一项:导出的格式如下:2.要想转成Excel格式的只需手动将该表复制到Excel中去。方法二:1.以下用的是Navicat Premium,可以换成任意图形化客户端SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAX..._mysql表结构整理成excel 快捷方便

python获取公网ip的几种方式_python显示当前公网ip-程序员宅基地

文章浏览阅读334次。from urllib2 import urlopenmy_ip = urlopen('http://ip.42.pl/raw').read()print 'ip.42.pl', my_ip from json import loadfrom urllib2 import urlopen my_ip = load(urlopen('http://jsonip.com'))['ip']print 'jsonip.com', my_ip from json import loadfro.._python显示当前公网ip

推荐文章

热门文章

相关标签