4.启动另一个Activity-Google官网上的Android初学训练

原文地址:http://developer.android.com/training/basics/firstapp/building-ui.html

响应按钮

  1. 在Android Studio, 从 res/layout 目录, 编辑activity_my.xml 文件.
  2. 在 <Button> 元素, 添加 android:onClick属性.

    res/layout/activity_my.xml

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

     android:onClick 属性的值, "sendMessage", 是用户点击按钮后调用的函数.

  3. 在 java/com.mycompany.myfirstapp 目录, 打开 MyActivity.java 文件.
  4. 在 MyActivity 类, 添加 sendMessage() 方法.

    java/com.mycompany.myfirstapp/MyActivity.java

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

    为了匹配 android:onClick指定的方法,定义的方法必须是:

    • public
    • void 返回值
    •  View 作为唯一参数(传递的是被点击的 View )

创建一个 Intent

  1. 在 MyActivity.java,  sendMessage() 方法, 创建 Intent 启动名为DisplayMessageActivity 的Activity:

    java/com.mycompany.myfirstapp/MyActivity.java

    public void sendMessage(View view) {
      Intent intent = new Intent(this, DisplayMessageActivity.class);
    }
    

    构造函数获得两个参数:

    •  Context 作为第一个参数 (this 代表当前Activity, Activity 是 Context的子类)
    •  应传递给 Intent 的Class (本例中, 应被启动的Activity)

    Android Studio 提示,必须导入 Intent 类.

  2. 文件顶端,导入 Intent class:

    java/com.mycompany.myfirstapp/MyActivity.java

    import android.content.Intent;
    

    小技巧: 在 Android Studio, 按 Alt + Enter (option + return on Mac) 导入缺少的 classes.

  3. Inside the sendMessage() method, use findViewById() to get the EditText element.

    java/com.mycompany.myfirstapp/MyActivity.java

    public void sendMessage(View view) {
      Intent intent = new Intent(this, DisplayMessageActivity.class);
      EditText editText = (EditText) findViewById(R.id.edit_message);
    }
    
  4. 导入EditText class.
  5. 文本赋值给本地变量 message, 使用 putExtra() 将值添加到 intent.

    java/com.mycompany.myfirstapp/MyActivity.java

    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);
    }
    

    Intent 可携带 key-value 对,称为 extras. putExtra() 用来添加key-value对.

  6. 在 MyActivity 顶部, 定义 EXTRA_MESSAGE:

    java/com.mycompany.myfirstapp/MyActivity.java

    public class MyActivity extends AppCompatActivity {
        public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE";
        ...
    }
    


  7. 在 sendMessage() 方法, 调用 startActivity() 方法

完整的 sendMessage() 方法如下:

java/com.mycompany.myfirstapp/MyActivity.java

/** 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);
}


创建第二个 Activity

所有 Activity 的子类必须实现 onCreate() 方法. Activity在此方法中接收Intent的信息. 同时, onCreate() 必须调用setContentView() 方法设置布局.

Android Studio中创建Activity

Figure 1. The new activity wizard in Android Studio.


  1. 在Android Studio, 在 java 目录, 选择包, com.mycompany.myfirstapp, 右键,选择 New > Activity > Blank Activity.
  2. 在 Choose options 窗口, 填写如下:
    • Activity Name: DisplayMessageActivity
    • Layout Name: activity_display_message
    • Title: My Message
    • Hierarchical Parent: com.mycompany.myfirstapp.MyActivity
    • Package name: com.mycompany.myfirstapp

    Click Finish.

  3. 打开 DisplayMessageActivity.java 文件.
  4. 移除 onCreateOptionsMenu() 方法.

接收Intent

每个 Activity 由一个 Intent调用, 无论用户如何导向到那个Activity. 调研 getIntent() 可获取调用了本Activity的 intent,从中获取信息.

  1. 在 java/com.mycompany.myfirstapp 目录, 编辑 DisplayMessageActivity.java 文件.
  2. 在 onCreate() 方法, 移除:
      setContentView(R.layout.activity_display_message);
    
  3. 获取intent.
    Intent intent = getIntent();
    
  4. 文件头部,导入 Intent.
  5. 使用 getStringExtra() 方法获取传递过来的信息.
    String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);
    

显示信息

  1. 在 onCreate() 方法, 创建 TextView 对象.
    TextView textView = new TextView(this);
    
  2. 设置尺寸和文本.
    textView.setTextSize(40);
    textView.setText(message);
    
  3. 将 TextView 设为根view.
    setContentView(textView);
    
  4. 文件顶部,导入 TextView 类.

完整的 onCreate() 方法如下:

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

    // Get the message from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MyActivity.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。

Figure 2. Both activities in the final app, running on Android 4.4.

就这样,创建了第一个 Android app!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值