前言:
有感而發整理一下之前的資料。startActivityForResult、onActivityResult之間的關西
先來進入八奇思考領域的第一步吧
情境:A activity 要到B activity (以下簡稱A和B),並且B 結束之後會回到 A
1、startActivityForResult用這個會將畫面帶到B,結束之後B 將會返回A,並帶值過來
2、onActivityResult這個是在應付B回到A之後,要如何接應你的數據在這之間Bundle就像郵差。
A就是你的老闆,你不想回信都還不行。
B就是職員,一定要回老闆信。
而中間的Bundle就是傳遞員。
startActivityForResult 就是郵筒,
而你要把信寄到onActivityResult就像秘書,秘書會處理一切收到的回信。
但假如A老闆有很多位員工C、D、E、F呢?
這就是傳令識別碼的功用了,你可以設定成任何你想設的模樣,只要A老闆 和其他員工之間特別的號碼,也就像員工編號一樣。
解釋完畢。END。好拉開玩笑的,讓我們來看看這是怎麼運作的。
程式碼:
這邊做一個顏色和文字間的傳遞作為示範activity_main.xml (慣老闆)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.hello.kaiser.colorpickertest.MainActivity"> <TextView android:id="@+id/tv_color" android:layout_width="300dp" android:layout_height="300dp" android:layout_centerHorizontal="true" android:gravity="center" android:text="顏色未色定" /> <Button android:onClick="selectColor" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_color" android:layout_centerHorizontal="true" android:text="選擇顏色" /> </RelativeLayout>
activity_color_picker.xml(員工A)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.hello.kaiser.colorpickertest.ColorPicker"> <RadioGroup android:id="@+id/icon_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:gravity="center" android:orientation="vertical"> <RadioButton android:id="@+id/radio_holo_red_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:buttonTint="@android:color/holo_red_light" android:checked="true" android:onClick="clickColor" android:text="holo_red_light" android:textColor="@android:color/holo_red_light" /> <RadioButton android:id="@+id/holo_orange_dark" android:layout_width="wrap_content" android:layout_height="wrap_content" android:buttonTint="@android:color/holo_orange_dark" android:onClick="clickColor" android:text="holo_red_light" android:textColor="@android:color/holo_orange_dark" /> <RadioButton android:id="@+id/holo_green_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:buttonTint="@android:color/holo_green_light" android:onClick="clickColor" android:text="holo_red_light" android:textColor="@android:color/holo_green_light" /> <RadioButton android:id="@+id/holo_blue_dark" android:layout_width="wrap_content" android:layout_height="wrap_content" android:buttonTint="@android:color/holo_blue_dark" android:onClick="clickColor" android:text="holo_red_light" android:textColor="@android:color/holo_blue_dark" /> </RadioGroup> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/icon_group" android:gravity="center" android:orientation="horizontal"> <Button android:onClick="canncel" android:id="@+id/cancel_action" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="canncel" /> <Button android:onClick="ok" android:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ok" /> </LinearLayout> </RelativeLayout>
BundleKey.java (傳遞員)
package com.hello.kaiser.colorpickertest; /** * Created by kaiser on 2017/7/24. */ public class BundleKey { public static final String BUNDLE_KEY_COLOR_INT = "com.daniel.android.colorint"; public static final String BUNDLE_KEY_COLOR_NAME = "com.daniel.android.colorname"; }MainActivity.java(老闆)
package com.hello.kaiser.colorpickertest; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { //傳令識別碼(這就像員工編號,只要信上的員工編號不是指你,你都不能開信。當然也不會想開xd) private static final int SELECT_COLOR_REQUEST = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void selectColor(View view) { //信箱寄信囉,員工編號顯示為 SELECT_COLOR_REQUEST startActivityForResult(new Intent(this, ColorPicker.class), SELECT_COLOR_REQUEST); } //老闆秘書,處理老闆一切收到的信件 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SELECT_COLOR_REQUEST) {//員工編號等於SELECT_COLOR_REQUEST,秘書開始處理事情 if (resultCode == RESULT_OK) {//收到的結果是result_ok的話 TextView textview = (TextView) findViewById(R.id.tv_color); Bundle bundle = data.getExtras(); int mColorInt = bundle.getInt(BundleKey.BUNDLE_KEY_COLOR_INT); CharSequence mColorNmae = bundle.getCharSequence(BundleKey.BUNDLE_KEY_COLOR_NAME); textview.setText(mColorNmae); textview.setBackgroundColor(mColorInt); } if (resultCode==RESULT_CANCELED){//如果收到的結果是result_canceled的話 Toast.makeText(this, "取消選擇", Toast.LENGTH_SHORT).show(); } } } }
ColorPicker.java(員工A)
package com.hello.kaiser.colorpickertest; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.RadioButton; public class ColorPicker extends AppCompatActivity { private int mColorInt; private CharSequence mColorName; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_color_picker); initColorData(); } private void initColorData() { RadioButton radio = (RadioButton) findViewById(R.id.radio_holo_red_light); mColorName = radio.getText(); mColorInt = radio.getCurrentTextColor(); } public void clickColor(View view) { RadioButton radio = (RadioButton) view; mColorInt = radio.getCurrentTextColor(); mColorName = radio.getText(); } public void ok(View view) {//員工選擇好要回信囉 Intent intent = new Intent(); intent.putExtra(BundleKey.BUNDLE_KEY_COLOR_NAME, mColorName); intent.putExtra(BundleKey.BUNDLE_KEY_COLOR_INT, mColorInt); setResult(RESULT_OK, intent); finish(); } public void canncel(View view) {//取消 setResult(RESULT_CANCELED); finish(); } }
複製貼上就出來了,不提供demo囉,有問題可以提出討論。