第六課:Activity(一)創建新Activity

接下來的一課教大家,開一個新的Activity,並把上一個Activity的Data傳到另一個Activity。

首先,開啟上一課的App,先創建一個Activity,在src資料夾按右鍵,按New來加一個Activity,當然也可以像普通的Java class一樣創建,但記得要創建用戶介面的XML(activity_second.xml),及在AndroidManifest.xml加入新Activity的Permission。

PIC03_New_Activity_Structure

PIC01_New_Activity

PIC02_New_Activity

在AndroidManifest.xml中的<application>裡加入:

[code language=”xml”]
<activity
android:name="com.hktecmedia.android.tutorial.SecondActivity"
        android:label="@string/title_activity_second" >
</activity>
[/code]

而在新的用戶介面的xml(activity_second.xml),只需要加上TextView的ID,全部源碼如下:

[code language=”xml”]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".SecondActivity" >

<TextView
                android:id="@+id/textView_welcome"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

</RelativeLayout>
[/code]

現在就要修改MainActivity及SecondActivity,做到可以把在MainActivity的Data傳到SecondActivity。修改MainActivity的onClick為如下:

[code language=”java”]
@Override
public void onClick(View v) {
        String name = etName.getText().toString();

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra(SecondActivity.KEY_NAME, name);
startActivity(intent);
}
[/code]

這裡要留意的是Intent這個Class,Intent其實就是「意圖」的意思,是告訴Android系統你的下一部是做什麼的,將來你也會不停用到Intent的。用Intent的putExtra是把data放到Intent裡,然後在SecondActivity透過KEY_NAME把name的內容拿出來。在這裡你可能會見到eclipse會指出SecondActivity.KEY_NAME有錯誤,在這裡可先不理會,因為我們現在就修改SecondActivity:

[code language=”java”]
import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;

public class SecondActivity extends Activity {

public static final String KEY_NAME = "name";

private TextView tvWelcome;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);

Bundle bundle = getIntent().getExtras();
String name = bundle.getString(KEY_NAME);

tvWelcome = (TextView) findViewById(R.id.textView_welcome);
tvWelcome.setText("Hello, " + name);
}

}

[/code]

PIC04_App_Output
PIC05_App_Output

發表回覆