zoukankan      html  css  js  c++  java
  • 14 Starting Another Activity

    本例源码:/Files/mshwu/L3_simpleinterface2.rar

    上一节,一个最简单的Activity,包括一个text field,跟一个按钮,这一节将响应该button的事件,开启另一个Activity。

    Response to the Button

    对Button事件的响应,也可以通过配置来完成,

    在layout定义文件activity_main.xml中添加android:onclick 于<button>组件中:

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

    或可视化编辑环境中如下图所示:

    image

    属性的值 SendMessage就是事件监听器的响应方法,当button被点击时,activity 中的SendMessage方法将会被调用,

    方法结构:

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

    public void sendMessage(View view) {

    // Do something in response to button

    }

    Tip:In Eclipse, press Ctrl + Shift + O to import missing classes

    通常事件监听器的响应方法必须满足:

    • 必须是public 的
    • 返回 void 值
    • 唯一的参数view(被点击的view)

    下面,我们将通过这个方法,读取text field 的值,传给另一个activity.

    Build and Intent

    intent 是一种对两种不同的组件提供运行时绑定的Object(比如两个activity),Intent理解为应该程序 “intent to do something”,Intent 可被广泛应用于不同的任务,用的最多就是用于开启另一个activity,

    在我们的响应方法里,创建一个intent,用于开启另一个Activity叫DisplayMessageActivity,

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

    构造方法有两个参数:

    第一个是Context,因为Activity 是这个类的一个子类。

    第二个是Class,Intent 将把信息发送到这一组件,在这个例子,新的Activity将会被开启。

    Intent 不但可以帮你开启另一个Activity,还可以传递捆绑的多种数据类型给新的Activity, 通过findViewById(API:Finds a view that was identified by the id attribute from the XML that was processed in onCreate(Bundle).)方法查找到EditText对象,并且把它的内容添加到intent中:

    Intent intent=new Intent(this,DisplayMessageActivity);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);

    Intent 捆绑的多种数据类型是用一种key-value对的形式,叫Extra, 方法putExtra(key, value)把数据按key – value捆绑到Intent 中,

    EXTRA_MESSAGE是我们定义的一个常量,当做key来使用,用你的包名前缀来做为定义Extras的key会是一个比较不错的习惯,因为你的程序要与别的程序打交道,可以确保你的KEY的唯一性。

    Start the second Activity

    我们需要调用startActivity()方法,传递intent进去开启一个新的Activity, 当系统接收到这些信息时,就会开启一个Intent所描述的Activity的新的实例,现在,完整的响应方法如下:

    /** Called when the user selects 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类DisplayMessageActivity。

    Create the second Activity

    src/<package-name>/directory 新建类DisplayMessageActivity.java,

    在类里,添加方法 onCreate:

    public class DisplayMessageActivity extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    }

    所有的Activity子类必须回调父类的onCreate方法,当你创建一个新的Activity实例时,系统会调用这一个方法,这里可以实现Activity layout,初始化必要的activity组件。

    Add it to the manifest

    所有的Activity必须在AndroidManifest.xml中有定义,这一文件可以理解成WEB中的WEB.XML

     

    Receive the Intent

    所有的Activity都是由intent触发,我们可以通过activity的方法getIntent()得到触发你的activity的Intent,从而也可以得到它所捆绑的数据,

    DisplayMessageActivity 类的onCreate方法里, 得到intent实例从面提取第一个Activity发送的信息:

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

    Display the Message

    创建一个textview,用于显示信息,勇过setContentView()方法把TextView设为Activity布局的根View

    完整的onCreate方法在第二个activity中:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        // Get the message from the intent
        Intent intent = getIntent();
        String message = intent.getStringExtra(EXTRA_MESSAGE);
    
        // Create the text view
        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);
    
        setContentView(textView);
    }
     

    运行效果:

    image

    Click Send button

    image

    到此,你的第一个应用程序创建完成

    下一节 Managing the Activity Lifecycle

  • 相关阅读:
    three.js cannon.js物理引擎之齿轮动画
    three.js cannon.js物理引擎之约束(二)
    three.js cannon.js物理引擎制作一个保龄球游戏
    three.js cannon.js物理引擎之制作拥有物理特性的汽车
    three.js cannon.js物理引擎之Heightfield
    three.js cannon.js物理引擎地形生成器和使用指针锁定控件
    three.js 之cannon.js物理引擎
    设计模式概述
    设计模式之单例模式
    java设计模式之抽象工厂
  • 原文地址:https://www.cnblogs.com/mshwu/p/2666959.html
Copyright © 2011-2022 走看看