上一篇的筆記 [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); } }
沒有留言:
張貼留言