上一篇的筆記 [Android Studio]入門筆記 Part 1介紹了基本的Android編程,例如使用Button, TextView 等。 今回的文章主要是介紹如何使用和切換Activity。
關於 Activity 的說明: http://developer.android.com/guide/components/activities.html
Activity的API: http://developer.android.com/reference/android/app/Activity.html
Activity是什麼呢? 簡單的來說,Activity在android裡面,是提供一個畫面以及畫面內相關操作的元件。在一些比較複雜的程序裡面,通常需要用到多過一種畫面的,這種情況下,則需要多過一種Activity。
以下例子,則介紹如何寫一個多畫面的程序,以及用上多過一個Activity。
在這個程序裡面,主要有兩個畫面。
第一個畫面,用在預設的MainActivity裡,主要是一個用來開啟另一個畫面(Activity)的按鈕,還有顯示文字結果:
第二個畫面,用在一個新建立的畫面裡面,Activity名稱為 TestAnotherActivity。主要是用來給用家輸入文字。
例如,我在第一個畫面(MainActivity) 按“START ANOTHER ACTIVITY”按鈕, 則會切換為第二個畫面(TestAnotherActivity)。在第二個畫面(TestAnotherActivity)輸入“ABC”,然後按“OK”的話,則會切換回第一個畫面(MainActivity) ,並且顯示“ABC”。
關於Activity的切換,以及數值的傳遞,主要會用到 Intent (android.content.Intent) 這個class。
詳細可看API: http://developer.android.com/reference/android/content/Intent.html
主要用到的代碼如下:
1. 開始一個新的Activity
Intent intent_another_activity = new Intent(this, TestAnotherActivity.class); startActivityForResult(intent_another_activity, 0);
2. 把數值傳入新的Activity裡面。在這個例子裡面,數值的名稱為“inputText”, 要傳入的數值則為“ABC”
intent_another_activity.putExtra("inputText", "ABC");
利用同樣方法,也可以傳遞多個數值:
intent_another_activity.putExtra("inputText1", "ABC");
intent_another_activity.putExtra("inputText2", "DEF");
3. 取回被傳入的數值。
Intent intent_current = getIntent();
String input_text = intent_current.getStringExtra("inputText");
4. 提交新開的Activity的結果,並且關閉Activity
Intent result = getIntent();
result.putExtra("inputText", tf_input.getText().toString());
setResult(Activity.RESULT_OK, result);
finish();
5. 取回Activity提交的結果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
String input_Text = data.getStringExtra("inputText");
txt_result.setText(input_Text);
}
}
以下為詳細的步驟:
源代碼: Github
1. 開一個新Project,以下為新Project的設定例子。2. 設計MainActivity的layout (activity_main.xml) , TextView的id為 txt_result,Button的id為btn_start_another_activity。
3. 開一個新的Blank Activity, 名稱為 TestAnotherActivity, 步驟和設定如下:
4. 設計TestAnotherActivity的layout (activity_test_another.xml) , EditText的id為 tf_input,Button的id為btn_ok。
5. MainActivity.java 的代碼如下:
package com.example.test_activity;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.content.Intent;
import android.app.Activity;
public class MainActivity extends ActionBarActivity {
TextView txt_result;
Button btn_start_another_activity;
MainActivity currentActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
currentActivity = this;
// Assign the TextView defined in layout XML to variable txt_result
txt_result = (TextView) findViewById(R.id.txt_result);
// Assign the Button defined in layout XML to variable btn_start_another_activity
btn_start_another_activity = (Button) findViewById(R.id.btn_start_another_activity);
//Add OnClick Listener to button
btn_start_another_activity.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent_another_activity = new Intent(currentActivity, TestAnotherActivity.class);
//Send current txt_result's value to new Activity(TestAnotherActivity)
intent_another_activity.putExtra("inputText", txt_result.getText());
//Start Activity
startActivityForResult(intent_another_activity, 0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
//get input text from TestAnotherActivity
String input_Text = data.getStringExtra("inputText");
txt_result.setText(input_Text);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
6. TestAnotherActivity.java 的代碼如下:
@Override
package com.example.test_activity;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class TestAnotherActivity extends ActionBarActivity {
EditText tf_input;
Button btn_ok;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_another);
//Assign the EditText(Text Field) defined in layout XML to variable tf_input
tf_input = (EditText) findViewById(R.id.tf_input);
// Assign the Button defined in layout XML to variable btn_ok
btn_ok = (Button) findViewById(R.id.btn_ok);
//Add OnClick Listener to button
btn_ok.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent result = getIntent();
//Put input text to result intent
result.putExtra("inputText", tf_input.getText().toString());
setResult(Activity.RESULT_OK, result);
//Exit this Activity
finish();
}
});
//Set input text field's value passed from MainActivity
Intent intent_current = getIntent();
tf_input.setText(intent_current.getStringExtra("inputText"));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_test_another, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}








沒有留言:
張貼留言