跟Google学习Android开发-起始篇-构建你的第一个应用程序(4)

来源:互联网 发布:json美化工具源码 编辑:程序博客网 时间:2024/04/30 15:50

1.4启动另一个活动


完成上一课后,你有一个应用程序可以显示带有文本字段和一个按钮的活动(单屏)。在这一课中,您将在MainActivity添加一些代码,使得用户点击发送按钮时能启动一个新的活动。


响应发送按钮


为了响应按钮的点击事件,打开 activity_main.xml布局文件并添加android:onClick  属性到<Button>元素:

<Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="@string/button_send"    android:onClick="sendMessage" />

android:onClick 属性的值“sendMessage” ,是用户单击按钮时系统调用的你的活动中的方法名称。

打开MainActivity类(位于项目的 src/目录),并添加相应的方法:

/** Called when the user clicks the Send button */
public void sendMessage(View view){
    // Dosomething in response to button
}

这需要你导入视图类:

import android.view.View;

提示:Eclipse中,按Ctrl + Shift +O导入缺少的类(CMD+ SHIFT + OMac)。

为了让系统匹配这个方法和android:onClick的方法名,签名必须完全如上所示。具体来说,该方法必须:

·      公共的

·      有一个void返回值

·      有一个视图作为唯一的参数被点击的是视图

接下来,您将填写这个方法来读取该文本字段的内容,并提供该文本到另一个活动。


建立一个Intent


一个意图是提供单独的组件(如两个活动)之间的运行时绑定的对象。意图表示一个应用程序想做一些事情。” 您可以使用意图实现多种任务,但多数情况下,他们用来启动另一个活动。

SendMessage()这个方法里面,创建一个启动活动的名称为DisplayMessageActivity意图:

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

这里使用的构造函数有两个参数:

·       上下文作为第一个参数是因为活动类是上下文一个子类

·      应用程序的组成部分的类,它是系统要传达的意图在这种情况下应启动的活动

向其他应用程序发送意图

在这一课中创建的意图是,称为显式意图,因为指定意图需要的特定的应用程序组件。然而,意图也可以是隐式的,在这种情况下,意图并没有指定所需的组件,但允许在设备上安装的任何应用程序响应这个意图,只要这些应用程序满足元数据(meta-data)的动作(action)的规格,那些动作由不同的意图参数来规定。欲了解更多信息,请参阅教程与其他应用程序交互

注:如果您使用的是IDE,比如Eclipse,对DisplayMessageActivity的引用 将增加一个错误,因为这个类尚不存在。现在忽略这个错误,你很快就会创建这个类。

意图不仅可以让你启动另一个活动,它还可以把一束数据带到这个活动。在SendMessage()方法中,使用findViewById()方法得到EditText元素,并把它的文本值添加到意图:

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常量

意向可以键-值对的方式带上各种数据类型,叫extraputExtra()方法将键名作为第一个参数,值作为第二个参数。

为了下一个活动能查询extra数据,你的意图extra应该使用公共常量作为键名。所以在MainActivity类的顶部添加EXTRA_MESSAGE定义:

public class MainActivity extends Activity {    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";    ...}

使用你应用的包名的前缀来命名意图的键名,通常是一个很好的做法。这确保它们是唯一的,如果你的应用程序还要与其他应用程序交互的话。


启动的第二个活动


要启动一个活动,调用startActivity()方法,向它传递你的意图。系统接收这个调用,并启动意图中 所指定的活动的一个实例。

加上这些新的代码,发送按钮调用完整的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);
}

为了让它可用,现在你需要创建DisplayMessageActivity类了。


创建第二个活动



1Eclipse中的新建活动的向导。

要使用Eclipse创建一个新的活动:

1.     在工具栏上点击新建 

2.     在出现的窗口中打开Android文件夹并选择Android活动单击“ 下一步

3.     选择BlankActivity并单击“ 下一步

4.     填写在活动的详细信息

o   项目MyFirstApp

o   活动名称DisplayMessageActivity

o   布局名称activity_display_message

o   标题My Message

o   谱系父com.example.myfirstapp.MainActivity

o   导航类型

单击“ 完成

如果你使用不同的IDE或命令行工具,在项目的src/目录创建一个新的文件名 ​​ DisplayMessageActivity.java,在原来的MainActivity.java文件旁边。

打开的DisplayMessageActivity.java文件。如果你使用Eclipse来创建这个活动:

·      类已经包含了一个必需onCreate() 方法的实现

·      还有一个onCreateOptionsMenu()方法的实现但在这个应用程序你不需要它所以你可以删除它

·      还有一个onOptionsItemSelected()方法的实现,它处理实施操作栏(action bar)中的向上的行为请保留它原来的样子

ActionBar API是因为仅适用于 HONEYCOMBAPI级别11)和较高的平台,您必须在getActionBar()方法周围添加一个条件来检查当前的平台版本。此外,您必须onCreate()方法添加@SuppressLint“NewApi”标签 避免线头(lint错误。

DisplayMessageActivity类现在看起来应该是这样的:

publicclassDisplayMessageActivityextendsActivity{

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);

        // Make sure we're running on Honeycomb or higher to use ActionBar APIs
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB){
            // 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类。

活动的所有子类都必须实现onCreate()方法。当创建一个新的活动实例时,系统会调用这个方法。在这个方法中,你必须通过setContentView()方法定义活动的布局,并为你的活动组件进行初始设置。

注:如果您使用的是Eclipse以外的IDE,你的项目不包含setContentView()需要的activity_display_message布局 。那也是可以的,因为你稍后将更新此方法,并将不使用该布局。

添加标题字符串

如果你使用Eclipse,你可以跳到下一章节,因为模板为新的活动提供了标题字符串。

如果您使用的是Eclipse以外的IDE,在strings.xml文件中为新的活动添加标题:

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

将它添加到清单(manifest

所有的活动都必须使用 <activity>元素在清单文件AndroidManifest.xml声明。

当你使用Eclipse工具创建活动时,它创建了一个默认项。如果你使用不同的IDE,你需要自己添加清单条目。它应该看起来像这样:

<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 属性声明此活动在应用程序的逻辑层次的父活动的名称。该系统使用此值来实现默认的导航行为,如在Android4.1API级别16)和更高的向上导航。通过使用支持库并添加如上所示的<meta-data>元素,您也可以为旧版本的Android提供相同的导航行为 

注意:你的Android SDK中应该已经包含了最新的Android支持库。它是ADT束附带的,但如果你使用不同的IDE,你应该在 添加的平台和软件包步骤中已经安装过。在Eclipse中使用模板时,支持库会自动添加到您的应用程序项目(你可以在AndroidDependencies下看到库的JAR文件列表)。如果你不使用Eclipse,你需要按照建立支持库指南手动将库添加到您的项目,然后再回到这里。

如果你正在使用Eclipse开发,可以运行现在的应用程序,但没有什么发生。点击发送按钮,启动第二个活动,但它使用模板所提供的一个默认“Hello world”的布局。你很快就会更新活动来显示一个自定义的文本视图,所以如果你使用不同的IDE,应用程序尚未编译也不要担心。


接收意图


每一个活动是由一个意图调用,不管用户是怎么导航到那里。你可以通过getIntent()方法得到调用您的活动的意图和它包含的数据。

DisplayMessageActivityonCreate() 方法,得到意图并提取提交到MainActivity消息:

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


显示信息


在屏幕上显示信息,创建一个TextView部件和使用setText()方法设置文本。然后把TextView传到setContentView()将它作为动布局的根视图 

完整onCreate()方法DisplayMessageActivity现在看起来像这样:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    // Get themessage from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    // Create thetext view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // Set thetext view as the activity layout
    setContentView(textView);
}

现在,您可以运行应用程序。当它打开时,在文本字段中键入信息,点击发送,然后信息会出现在第二个活动中。


2最终的应用程序里的两个活动,运行环境Android 4.0

就这样,你已经建立了你的第一个Android应用程序!

要了解更多关于构建Android应用程序,继续跟随我们的基本训练课程。下一课是管理活动的生命周期

原创粉丝点击