首页 > 移动平台 > 详细

android自学-第3课-启动另外一个Activity

时间:2014-02-25 15:04:42      阅读:441      评论:0      收藏:0      [点我收藏+]

启动另外一个Activity

 

在完成了上一节课的学习后,我们已经创建了一个带有text输入框和一个button的app。

在本课中,我们将在MainActivity类中添加SendButton的单击响应代码以启动另外一个Activity。

 

响应Send Button

 

为了响应Send Button的单击事件,我们打开Activity_main.xml布局文件,

并且为<Button>元素添加android:onClick属性:

bubuko.com,布布扣
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage" />
bubuko.com,布布扣

android:onClick属性的值:"sendMessage",是MainActivity的一个方法名,并且当用户

单击Send Button的时候会调用该方法。

 

打开类MainActivity(在项目src目录下),然后在该类中添加Send Button的响应方法:sendMessage。

bubuko.com,布布扣
/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    // Do something in response to button
}
bubuko.com,布布扣

如果使用的是Eclipse等类似的编辑器的话,在参数View的地方会提示错误的,为了不出现错误,需要先导入View类。

bubuko.com,布布扣
import android.view.View;
bubuko.com,布布扣

小提示:在Eclipse下可以使用快捷键Ctrl+Shift+O组合键自动导入需要导入的类。(Mac系统下快捷组合键是:Cmd+Shift+O)

 

为了系统能够将该方法和android:onClick事件绑定到一起,该方法需要设置如下标志位(修饰符?):

1.该方法需要为Public类型

2.返回值类型需要为void

3.View作为唯一的参数(标识哪个view的单击事件)

 

建立一个Intent

 

Intent是一个对象,它能够将两个分离的组件(比如两个Activities)进行运行时绑定。

Intent可以理解为当前app “想要做什么”。你可以为多任务使用Intent,但是大多数情况下

我们常常是用Intent来启动另外一个Activity。

 

现在我们在sendMessage()方法内创建一个Intent来启动另外一个叫DisplayMessageActivity的Activity。

bubuko.com,布布扣
Intent intent = new Intent(this, DisplayMessageActivity.class);
bubuko.com,布布扣

Intent函数初始化构造函数需要两个参数:

1.第一个参数是一个设备上下文Context(这里使用this的原因是因为Activity类是Context类的子类)

2.第二个参数是Intent需要启动的Activity。

注意:当我们在Eclipse以及其类似的IDE下编写此代码时,使用DisplayMessageActivity时会触发一个错误。

现在先忽略这个错误提示,因为我们还没有创建Activity DisplayMessageActivity,我们会在稍后创建它。

 

创建的Intent不仅仅能够启动一个Activity,而且我们可以为它附加一些数据包。在sendMessage()方法中,

我们可以使用findViewById()方法来获得EditText元素,然后获取该元素的值并且将它附加到Intent中。

bubuko.com,布布扣
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);
bubuko.com,布布扣

注意:此段代码需要导入android.content.Intent包和android:widget.EditText包,而且我们稍后会定义

EXTRA_MESSAGE常量。

 

Intent可以附加各种数据类型的集合使用STL中我们熟知的键-值的方式,我们称它为额外的(extras)。

附加方法就是使用putExtra()方法,它的第一个参数就是键值,第二个参数就是该键对应的值。

 

为了指定的Activity能够获取Intent附加的值,我们需要使用一个public类型的常量来作为附加值的键值。

所以我们定义在MainActivity类的顶部创建EXTRA_MESSAGE常量:

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

为了区分不同的app,一种好的定义键值的方式就是使用app包的名字作为前缀。这样能够确保它的唯一性。

 

启动指定的Activity

 


为了启动Activity,我们需要调用startActivity(方法),该方法的参数就是我们创建好的Intent。

当系统执行到该方法时,就会创建一个由Intent指定的Activity的实例(句柄?)

 

完成以上步骤以后,sendMessage()方法应该是如下面所示的代码:

bubuko.com,布布扣
/** 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);
}
bubuko.com,布布扣

接下来我们就需要创建DisplayMessageActivity类了。

 

创建第二个Activity类。

 

使用Eclipse创建另外一个Activity类的步骤如下:

1.点击新建图标。

2.选择Android文件夹下的Android Activity,然后单击下一步。

3.选择BlankActivity,然后单击下一步。

4.填写新类的具体参数:

  11. Project: MyFirstApp  ->也就是我们当前的app

  22. Activity Name: DisplayMessageActivity ->也就是我们将要创建的类的名称

  33. Layout Name: activity_display_message  -> 布局xml文件名称

  44. Title: My Message  -> 新Activity标题名称

  55. Navigation Type: none

  bubuko.com,布布扣

5.点击完成按钮。

如果你使用的不是Eclipse或者是命令行工具,在项目src目录下于MainActivity.java文件相邻位置创建一个DisplayMessageActivity.java文件。

 

如果使用的是Eclipse创建的Activity,那么我们打开DisplayMessagActivity.java文件。

1.新建的类已经帮我们创建好了onCreate()方法。

2.还有一个创建好的哦你CreateOption是Menu()方法,不过这个例子不需要它,所以可以删除掉。

3.还有一个创建好的哦你Option是ItemSelected()方法,这个方法用来处理单击ActionBar上的上一步操作按钮的点击事件。保留该方法。

因为ActionBar的API只在HONEYCOMB(API level 11)以及其以后的版本才能使用。所以我们必须在使用getActionBar()方法前进行条件判断

以判断当前的平台是否支持此API。另外我们必须在onCreate()方法内使用@SuppressLint("NewApi")标签来避免lint错误。(注:新版本的Android SDK

已经不需要这令不处理了,它自己创建好了一个setupActionBar()方法来进行检查操作。)

 

现在DisplayMessageActivity类的内容大致如下:

bubuko.com,布布扣
public class DisplayMessageActivity extends Activity {

    @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);
    }
}
bubuko.com,布布扣

android自学-第3课-启动另外一个Activity

原文:http://www.cnblogs.com/justwake/p/3565078.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!