安卓开发----开始另一个活动

在你学习完成上一节的内容,你有一个自己的APP,它是一个单个界面的APP,有一个文字域和按钮,在

这一节我们将增加一些代码到MainActivity,它将开启一个新的界面,当用户点击Send Button。


一 Send Button的响应

当你点击send_button时,有一个on-click事件,打开activity_main.xml布局文件,增加android:onClick属性

到<Button>元素。




android:onClick的属性值,sendMessage,是你的活动的方法的名称,当你点击按钮,系统将调用这个函数。

打开MainActivity类,src/目录下,增加方法,而且需要导入一个View类,如下:



为了让系统匹配这个方法到给定的android:onClick设置的方法,方法必须具备如下的条件:

1)必须是public类型

2)方法返回值为void

3)仅仅有一个View的入参,(这个例子的View是Button)

下面,我们将编写这个方法,这个函数读textField输入的字符,将它发生到另外一个活动。

二 建立一个Intent

Intent是一个对象,这个对象提供运行时的两个组件的绑定(例如两个活动之间)。Intent

代表一个应用程序的“尝试做一些事情”。你可以在多种任务中使用Intent,但是大多数情况下

他们使用它去启动另外一个活动。

在sendMessage函数里,创建一个Intent去开始一个活动,叫做DisplayMessageActivity:

    // 增加的内容
    public void sendMessage(View view){
    // Do something in response to button
   
    Intent intent = new Intent(this, DisplayMessageActivity.class);
   
    }

DisplayMessageActivity:

构造器使用两个参数:

1)Content作为第一个参数,(this备用是因为这个Activity类似一个Content的子类)

2)Intent被投机到那个APP的组件类(这个例子,)

注意:如果你使用IDE例如Eclipse将产生一个错误,因为这个类还不存在,现在忽略这个

错误,你后面将创建这个类。

一个Intent不仅仅允许你启动另外一个Activity,而且你可以运送一个投机数据到Activity。

在sendMessage()方法里,使用findViewById()去获取EditText元素,增加它的text内容到

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-value类型的,叫做extras。putExtra方法是带着keyName

作为第一个参数,Value作为第二个参数。

为了下个一个Activity能够查找到extra数据,你应该为你的Intent的extra定义一个key,作为一个公共常量。所以

增加EXTRA_MESSAGE定义在MainActivity类顶部。




通常一个好的习惯是使用你的应用程序包的名称作为前缀定义KEY.这样可以使得他们是唯一的命名。

二 开始第二个活动

要启动一个Activity,调用startActivity()函数,并把它传递给Intent,系统接收调用,并且启动一个Activity实例,这个Activity被Intent指定。

有了这个新的代码,完整的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 类。

三 创建第二个Activity

使用Eclipse传教一个新的Activity:

1)在工具栏点击New

2) 会出现一个窗口,打开Android文件夹,选择Android Activity,点击下一步

3)选择BlankActivity点击下一步

4)填写Activity的细节

(1)Project:My

(2)Activity Name:DisplayMessageActivity

(3)Layout Name:activity_display_message

(4)Title:My Message

(5)Hierarchial Parent:com.example.my.MainActivity

(6)Navigation Type:None

点击完成


如果你正在使用不同的IDE或命名行工具,创建一个新的文件,命名为DisplayMessageActivity.java在你的工程中

src/文件夹中。

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


1)这个类以及包含了一个需要的onCreate()方法

2)也有一个onCreateOptionMenu()方法的实现,但是如果你不需要,你可以从你的APP中删除它。

3)还有一个onOptionItemSelected()的实现,它用于处理操作栏的Up行为。请记住这个事情是这样的。

因为ActionBar API仅仅在HONEYCOMB和更高的版本中可用,你必须在添加getActionBar()方法的时候检查当前平台

的版本。另外你必须增加@SuppressLint("NewApi")标签到onCreate()方法去避免lint错误。

DisplayMessageActivity类看起来应该像下面的内容:

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);
    }
}
如果你使用的其他的IDE,更新你的DisplayMessageActivity类为上面的代码。

所有的Activity的子类必须实现onCreate()方法。当创建一个新的Activity的实例时系统调用这个。


四 增加一个标签字符串


你若使用Eclipse工具,你可以跳过这个小节,以为模板已经提供了一个标题字符串为你的新Activity。

若你使用其他的IDE工具,增加新的Activity的标题到你的strings.xml文件

<resources>
    ...
    <string name="title_activity_display_message">My Message</string>
</resources>
查看Eclipse的strings.xml如下


显然已经有了这个字符串


五 增加这个Activity到manifest

所以的Activity必须在你的manifest文件中声明,AndroidManifest.xml,使用一个<Activity>元素

当你使用Eclipse工具创建这个活动,这个已经默认创建。如图所示:



你若使用其他工具,你需要增加它到manifest中,

添加完毕后manifest看起来如下:

<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>
在调试器上循序如下:


在APP中输入字符串:


点击Send按钮



六 接受Instent

每一项活动被一个Intent调用,无论用户如何如何导航。你可以获取这个Intent,它通过getIntent()函数启动你的Activity和接受数据。

在DisplayMessageActivity类的onCreate()方法,获取Intent和通过MainActivity传教消息:

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
七 显示消息

为了在屏幕上显示消息,创建一个TextView窗口,设置字符串使用setText()函数,然后增加TextView

作为根视图通过setContentView()函数传递它。

@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);
}
然后运行APP查看如下:


输入字符串

输入字符串



点击按钮



完毕!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值