zoukankan      html  css  js  c++  java
  • [安卓基础] 006.打开另一个Activity

    打开另一个Activity

    这篇文章你会学到的东西:
    1、如何给按钮添加响应事件。  
    2、创建一个Intent。
    3、创建一个新的Activity。
    4、点击按钮,打开另一个Activity。
    5、接收Intent。
    6、用Intent在Activity之间传输信息。
    


    如果你完成了前面的几节课程,你已经创建好了一个app,就像这样:

    但这个app一点用处都没有,上面的输入框,没有任何的功能,非常的无聊。来,
    我们给它加上一些功能,让它变得有趣起来。我们可以往输入框输入一些东西,点击【发送】,就会弹出另一个界面,这个界面上显示的是发送的信息。

    给按钮加入响应事件

    为了给按钮加入响应事件。我们要做几个事情。

    在activity_main.xml中,添加按钮响应方法。

    修改activity_main.xml,我们在button标签中,添加onClick属性。sendMessage是这个button点击的时候会执行的方法。如下:

    1     <Button
    2         android:id="@+id/btn_send_message"
    3         android:layout_width="wrap_content"
    4         android:layout_height="wrap_content"
    5         android:text="@string/button_send"
    6         android:onClick="sendMessage" />

    那sendMessage的方法,在哪里写,button才能调用的到?答案是:要把这个方法写在button所在的Activity里。
    在com.babybus.study.firstapp.MainActivity里,添加sendMessage:

    1     public void sendMessage(View v) {
    2 
    3     }

    这样方式写的按钮,响应方法必须有这几点要求:
    1. 必须是公共方法
    2. 返回参数必须是void类型
    3. 只有一个View作为它的参数(这个View其实就是被点击的button。我们在前面的课程已经学过,布局文件上的所有的东西其实都是View或者View Group的子类。)

    Note:给按钮添加响应事件,除了上面的写法,还有另外一种方式,就是直接在代码中给button添加响应方法。这种方法,你不需要在xml文件中给按钮增加onClick属性。代码如下:  
    
            Button mButton = (Button) this.findViewById(R.id.btn_send_message);
            mButton.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    // 做响应的事
                    
                }
            });

    接下来,我们要给这个方法加入一个功能:可以获取输入框中的内容,并把内容发送给另一个Activity。

    创建一个Intent

    在MainActivity的sendMessage()方法中,我们创建一个Intent来打开DisplayMessageActivity(另一个Activity,这个Activity的创建我们后面会讲到。) 代码如下:

        public void sendMessage(View v) {
            EditText mEditText = (EditText) this.findViewById(R.id.edit_message);
            String message = mEditText.getText().toString();
            Intent intent = new Intent(this, DisplayMessageActivity.class);
        }
    Note:此刻这段代码会提示错误,因为我们还没有创建DisplayMessageActivity,没有关系,后面我们会创建它。
    

    Intent,翻译过来是意图的意思。可以用它来给组件们(这里是两个Activity)传递信息。Intent还可以做许多其他的事情,如接受广播机制发送过来的消息等,但最经常的就是用它来在Activity之间传递消息了。
    在MainActivity上,我们导入Intent类。

    import android.content.Intent;


    在sendMessage方法中,我们加入下面的代码:

    intent.putExtra(EXTRA_MESSAGE, message);

    Intent可以携带extra(它是一个封装了键和值的数据),putExtra()方法中,第一个参数是Key,第二个参数是Value。
    我们添加一个静态的成员变量来定义一个EXTRA_MESSAGE。

        public static final String EXTRA_MESSAGE = "com.babybus.study.firstapp.MESSAGE";

    为了让另一个Activity能查询到extra,我们对key的定义,建议要定义成公共的静态方法。并且有一个通用的非常好的习惯就是,在定义key值,要加上包名作为前缀。这可以保证在和其他组件或者应用交互的时候,保证key的唯一性。
    在sendMessage方法中,我们使用startActivity来发送Intent。调用startActivity方法,安卓系统会接收到一个指令,这个指令告诉系统要打开Intent设定的另一个Activity。至此,sendMessage中完整的代码是这样:

        public void sendMessage(View v) {
            EditText mEditText = (EditText) this.findViewById(R.id.edit_message);
            String message = mEditText.getText().toString();
            Intent intent = new Intent(this, DisplayMessageActivity.class);
            intent.putExtra(EXTRA_MESSAGE, message);
            this.startActivity(intent);
        }

    创建另一个Activity

    我们创建DisplayMessageActivity。 在DisplayMessageActivity的onCreate方法中,添加如下代码:

    package com.babybus.study.firstapp;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class DisplayMessageActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_display_message);
            
        }
    }

    我们也定义一个DisplayMessageActivity的布局文件,记得在res/layout中创建一个。代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
        <TextView 
            android:id="@+id/textview_display_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    我们创建了一个新的Actiivty,需要在AndroidManifest.xml注册,这个大管家(清单)管理着所有的组件。

            <activity
                android:name="com.babybus.study.firstapp.DisplayMessageActivity"
                android:label="@string/display_message_activity_name" >
            </activity>

    到此为止,运行App,点击按钮,就会打开DisplayMessageActivity。但这个时候,如果你在输入框输入内容,点击【发送】,DisplayMessageActivity还是无法展示信息。我们接下来要做的,就是获取MainActivity发送过来的内容,在DisplayMessageActivity的TextView展示出来。

    接收Intent

    在DisplayMessageActivity的onCreate方法中,我们添加代码:

    Intent intent = getIntent();

    从Intent获取extra把内容显示出来。

    在DisplayMessageActivity的onCreate方法中,我们获得Intent传递过来的内容。并把它展示出来。代码如下:

            String message = intent.getExtras().getString(MainActivity.EXTRA_MESSAGE);
            TextView mTextView = (TextView) this.findViewById(R.id.textview_display_message);
            mTextView.setText(message);

    至此,一个完整的小应用就做好了。运行app,在输入框输入一些内容,点击【发送】,会在另一个Activity上显示刚才输入的内容。DisplayMessageActivity完整代码如下:

    package com.babybus.study.firstapp;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class DisplayMessageActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_display_message);
            
            Intent intent = getIntent();
            String message = intent.getExtras().getString(MainActivity.EXTRA_MESSAGE);
            TextView mTextView = (TextView) this.findViewById(R.id.textview_display_message);
            mTextView.setText(message);
        }
    }

     

    本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 
    转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4551420.html

     

  • 相关阅读:
    ValueStack、ActionContext
    s debug
    1923: [Sdoi2010]外星千足虫
    1013: [JSOI2008]球形空间产生器sphere
    HDU 3923 Invoker
    poj 1286 Necklace of Beads
    HDU 3037:Saving Beans
    2440: [中山市选2011]完全平方数
    1101: [POI2007]Zap
    1968: [Ahoi2005]COMMON 约数研究
  • 原文地址:https://www.cnblogs.com/superdo/p/4551420.html
Copyright © 2011-2022 走看看