android: startActivityForResult用法(啟動其他Activity並返回結果)
startActivityForResult:該方法用於啟動指定Activity,而且期望獲取指定Activity返回的結果。
例如應用程式第一個介面需要使用者進行選擇,但是這種選擇的列表資料很複雜,需要啟動另一個Activity讓使用者選擇。當用戶在第二個Activity中選擇完後程序返回第一個Activity,此時第一個Activity必須獲取並顯示使用者在第二個Activity中選擇的結果。
為了獲取被啟動的Activity所返回的結果,需要從兩方面入手:
1.當前Activity(主)需要重寫onActivityResult(int requestCode ,int resultCode ,Intent intent),當被啟動的Activity返回時,這個方法會被觸發。(第一個引數代表請求碼,第二個引數代表Activity返回的結果碼,這個結果碼由開發者自行設定)
2.使用startActivityForResult(Intent intent, int requestCode)方法開啟新的Activity
3.被啟動的Activity(新)需要呼叫setResult()方法設定處理結果
例:
//主Activity
public class MainActivity extends Activity {
private final static String TAG="MainActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bt=(Button)this.findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//啟動指定的Activity並等待返回的結果
//第二個引數為請求碼,可以根據業務需求自己編號
startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//處理特定的資料結果
if(requestCode == 1 && resultCode == 1)
{
//可以利用Bundle進行資料交換
......
}
}
}
//新Activity
public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
Button bt=(Button)findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//資料是使用Intent返回
Intent intent = new Intent();
//把返回資料存入Intent
intent.putExtra(String name, Xxx value);//按key-value對的形式存入資料
//設定返回資料
OtherActivity.this.setResult(RESULT_OK, intent);
//關閉Activity
OtherActivity.this.finish();
}
});
}
}
//注:上述程式碼只是示範使用startActivityForResult()的步驟,並不能在虛擬機器上執行!!!
使用startActivityForResult(Intent intent, int requestCode)方法開啟新的Activity,我們需要為startActivityForResult()方法傳入一個請求碼(第二個引數)。請求碼的值是根據業務需要由自已設定,用於標識請求來源。
在一個Activity中,可能會使用startActivityForResult()方法開啟多個不同的Activity處理不同的業務,當這些新Activity關閉後,系統都會呼叫前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法,這裡就需要使用到結果碼。
例:
public void onCreate(Bundle savedInstanceState) {
....
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, ActivityOne.class), 1);
}
});
button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, ActivityTwo.class), 2);
}
});
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == ...&& resultCode == ...)
{
........
//處理特定的請求
}
}
}
public class ActivityOne extends Activity {
.....
ActivityOne.this.setResult(1, intent);
ActivityOne.this.finish();
}
public class ActivityTwo extends Activity {
......
ActivityTwo .this.setResult(2, intent);
ActivityTwo .this.finish();
}
相關推薦
android: startActivityForResult用法(啟動其他Activity並返回結果)
startActivityForResult:該方法用於啟動指定Activity,而且期望獲取指定Activity返回的結果。 例如應用程式第一個介面需要使用者進行選擇,但是這種選擇的列表資料很複雜,需要啟動另一個Activity讓使用者選擇。當用戶在第二個Activity
Android-bindService遠端服務啟動其他應用的Activity
Service2應用,在AndroidManifest.xml檔案中對外暴露MyService2服務: <!-- 代表在應用程式裡,當需要該service時,會自動建立新的程序。 android:process=":re
(備忘)Android app中呼叫啟動其他應用(系統應用和第三方應用)
一、開啟第三方應用 方法一 Intent intent=new Intent(); //包名 包名+類名(全路徑) intent.setClassName("com.linxcool", "com.linxcool.PlaneAct
Android 點選通知欄訊息開啟activity,並判斷app是否執行
android的通知欄訊息點選事件如果是開啟一個activity時,我們要考慮兩種情況: 應用正在前臺執行。 應用已退出。 如果是第一種情況那麼就好處理了,直接為Intent設定flag為FLAG_ACTIVITY_NEW_TASK,然後呼叫context.
Android學習筆記(五:Activity和main.xml檔案
我們在Andriod學習筆記(三):Andriod程式框架,中對main.xml檔案進行了初步的瞭解,這本次,我們將初步學習Activity和main.xml的關係。雖然我們可以使用java code來編寫UI,但是更通用的方式是使用XML-based Layout檔案,它用於描述widget和contain
Android Intent傳值(兩個Activity之間傳遞資料)
在兩個Activity之間傳遞資料,最終都是通過Intent傳遞,但設定資料和儲存資料方式有兩種(使用Intent 和 Bundle),分別對應如下: 設定資料(MainActivity.java) 方法一:1.直接用intent.putExtra(“name”,“張三”)
Android-AndroidManifest.xml預設啟動的Activity(探索篇01)
AndroidManifest.xml-->預設啟動 MusicBrowserActivity <activity android:name=".MusicBrowserActivity" android:theme="@
android selector用法(切換字型以及背景顏色)
在res資料夾下新建資料夾color、drawable,且必須這樣命名,其中資料夾color中存放用於改變字型顏色的selector,drawable中存放用於改變控制元件背景顏色的selector。 在xml佈局檔案中,android:background="@draw
Android startActivityForResult用法詳解
一、如果想在Activity中得到新開啟Activity 關閉後返回的資料,需要使用系統提供的startActivityForResult(Intent intent, int requestCode)方法開啟新的Activity,新的Activity 關閉後會向前面的Activity傳回資料,為了得到傳
快速入門android AIDL(開啟多程序並進行通訊)
為何要開啟多程序?主要有兩種情況:一、一個應用由於自身需要採用多程序模式來實現。比如播放器之類,如果僅僅在service中執行會影響主執行緒的響應速度,很可能會造成ANR,一般情況下不會這麼寫;如果僅僅在子執行緒中執行,一旦開啟該執行緒的Activity被殺死後,執行緒也被殺
Android receiver 多次啟動相同Activity
在Receiver中多次啟動相同的Activity,如果Intent是相同的是不會重新建立Activity的,只有Intent內容不同時才會啟動多個Activity。 TestActivity.java 程式碼段: package com.example.g
[BZOJ 1455]羅馬遊戲(左偏樹+並查集)
node truct scrip logs wap find eap lib space Description 羅馬皇帝很喜歡玩殺人遊戲。 他的軍隊裏面有n個人,每個人都是一個獨立的團。最近舉行了一次平面幾何測試,每個人都得到了一個分數。 皇帝很喜歡平面幾何,他對那些得
2017端午歡樂賽——Day1T3(樹的直徑+並查集)
模擬 -s alt algorithm const image scanf () ear //前些天的和jdfz的神犇們聯考的模擬賽。那天上午大概是沒睡醒吧,考場上忘了寫輸出-1的情況,白丟了25分真是**。 題目描述 小C所在的城市有 n 個供電站,m條電
Masonry部分用法(控件數組等間隔排序)
divide arduino sco htm req 並且 高度 發的 groov (轉自)http://www.jianshu.com/p/1d1a1165bb04 簡要 自動布局最重要的是約束:UI元素間關系的數學表達式。約束包括尺寸、由優先級和閾值管理的相對位置。它
Java學習筆記—多線程(同步容器和並發容器)
clas href blank post sts 代碼 線程 包括 ear 簡述同步容器與並發容器 在Java並發編程中,經常聽到同步容器、並發容器之說,那什麽是同步容器與並發容器呢?同步容器可以簡單地理解為通過synchronized來實現同步的容器,比如Vector
hdu1233 繼續暢通工程 (最小生成樹——並查集)
ali std hint 政府 inpu truct class () con 還是暢通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot
linux4.11內核設備編譯時出現的問題(參考博客並更改的)
作文 成了 內核啟動參數 inf 編譯 下載 bin span console AllWinnerH3 linux4.11版本的bsp下載: https://pan.baidu.com/s/1mhU4a8K 密碼: b375 H3-linux4.11_bsp目錄就是所需
BZOJ4025 二分圖(線段樹分治+並查集)
data cto 距離 har oid bsp find vector 節點 之前學了一下線段樹分治,這還是第一次寫。思想其實挺好理解,即離線後把一個操作影響到的時間段拆成線段樹上的區間,並標記永久化。之後一塊處理,對於某個節點表示的時間段,影響到他的就是該節點一直到線段樹
java呼叫命令提示符並返回結果(中文無亂碼)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import
JavaScript 詳解預編譯原理(和其他語言很不一樣)
JavaScript 預編譯原理 今天用了大量時間複習了作用域、預編譯等等知識 看了很多博文,翻開了以前看過的書(好像好多書都不會講預編譯) 發現當初覺得自己學的很明白,其實還是存在一些思維誤區 (很多博文具有誤導性) 今晚就整理了一下凌亂的思路 先整理一下預編譯的知識吧,日後有時間再把作用