前言:
有感而發整理一下之前的資料。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囉,有問題可以提出討論。



















