1. 程式人生 > >啟動Activity的兩種方式

啟動Activity的兩種方式

1、在一個Activity中呼叫startActivity()方法。這種方法

2、在一個Activity中呼叫startActivityRequest()方法。

重寫onActivityResult方法,用來接收B回傳的資料。

在B中回傳資料時採用setResult方法,並且之後要呼叫finish方法。

第一種方法簡單直接。但是如果A呼叫B,並傳遞資料,同時B對資料處理後又返回給A,A再將資料顯示出來。碰到這種情況,用第一種方法需要在A的onCreate()裡面判斷是第一次生成的介面,還是由B開啟的A。這樣比較麻煩,用第二種方法就簡單了,在A的onCreate()只用寫一次生成的介面的內容。在A的onActivityResult方法裡放B處理完資料後的內容就可以了。

下面是第二中方法的具體講解:

1.跳轉的時候不是採用startActivity(intent) 這個方法,而是startActivityForResult(Intent intent, Int requestCode)

requestCode:請求碼,當A呼叫startActivityForResult時,requestCode會被傳遞到B中。

Intent intent=new Intent();
intent.setClass(A.this, B.class);
Bundle bundle=new  Bundle();
String str1="aaaaaa";
bundle.putString("str1
", str1); intent.putExtras(bundle); startActivityForResult(intent, 0);//這裡採用startActivityForResult來做跳轉,此處的0為一個依據,可以寫其他的值,但一定要>=0

2.重寫onActivityResult方法,用來接收B回傳的資料。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		switch (resultCode) { //resultCode為回傳的標記,我在B中回傳的是RESULT_OK
		case
RESULT_OK: Bundle b=data.getExtras(); //data為B中回傳的Intent String str=b.getString("str1");//str即為回傳的值
                      break;
		default:
	           break;
		}
	}

3.在B中回傳資料時採用(int resultCode, Intent intent)方法,並且之後要呼叫finish方法。

resultCode 結果碼,當B呼叫finish方法後,B會將resultCode 和開始A傳過來的
requestCode一同傳回給A。
setResult(RESULT_OK, intent); //intent為A傳來的帶有Bundle的intent,當然也可以自己定義新的Bundle
finish();//此處一定要呼叫finish()方法

================================================================================================================================

在一個主介面(主Activity)上能連線往許多不同子功能模組(子Activity上去),當子模組的事情做完之後就回到主介面,還同時返回一些子模組完成的資料交給主Activity處理。


用startActivity啟動主介面是一個新的Intent例項,而訪問的主介面還在activity棧的下面沒有調出來,這樣做的一個最大的問題是,回不到原介面就不能多個子功能模組共同來給主介面提供資料或服務了。
目的: A.java 是主介面,B.java 是子功能模組,要從A啟動B,B幹完活之後把結果彙報給A
先看 A.java 的相關程式碼


//-- A.java --//
//啟動B
Intent bintent = new Intent(A.this, B.class);
//設定 bintent的Bundle的一個值
String bsay = "Hello, this is B speaking"; 
bintent.putExtra("listenB", bsay)
startActivityForResult(bintent,0); // 引數(Intent intent, Int requestCode) 的 requestCode 對應下面回收Bundle時識別用的


//重寫onActivityResult()來處理返回的資料,建議先看B.java 的程式碼再回來看這裡比較好理解
//這理有三個引數 requestCode, resultCode, data
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) { //resultCode為回傳的標記,我在B中回傳的是RESULT_OK
case RESULT_OK:
Bundle b=data.getExtras();  //data為B中回傳的Intent
String str=b.getString("ListenB");//str即為回傳的值"Hello, this is B speaking"
                      break;
default:
          break;
}
}


-------------------------------------------------------------------------------------
//-- B.java --//
// 用 setResut() 準備好要回傳的資料後,只要使用finish()的方法就能把打包好的資料發給A且執行onActivityResult()部分的程式碼


Intent aintent = new Intent(B.this, A.class);
setResut(RESULT_OK,aintent); //這理有2個引數(int resultCode, Intent intent)
... ...
finish();


startActivityForResult(Intent intent, Int requestCode)
intent 傳給B,requestCode >=0,隨便用於在onActivityResult()區別哪個子模組回傳的資料,如果還有C.java ,D甚至E子模組的話,每個區分開不同的requestCode就好。


setResut(int resultCode, Intent intent)
resultCode 如果B子模組可能有幾種不同的結果返回,可以用這個引數予以識別區分。這裡還有個特殊的 RESULT_OK 值,沒有特殊情況用它就好。


onActivityResult(int requestCode, int resultCode, Intent intent)
這裡三個都不用解釋了,與上文對應的東西。如果不對requestCode和resultCode 加以識別區分的話,只要有其他activity setResult到了A  onActivityResult()會無差別處理。


相關推薦

Android6.0 AMS啟動Activity(一) 啟動Activity方式

 在Android系統中,有兩種操作會引發Activity的啟動: 一種使用者點選應用程式圖示時,Launcher會為我們啟動應用程式的主Activity; 而另一種當應用程式的預設Activity啟動起來後,它又可以在內部通過呼叫startActvity介面啟動新的

win7設定自啟動方式(谷歌瀏覽器自啟動並預設全屏展示不需要按F11)

功能需求:win7系統需要設定谷歌瀏覽器自啟動,然後進入一個頁面進行播放展示,預設的是瀏覽器全屏。 首先第一步設定自啟動兩種方法: 方法1: win7系統在開始選單中找到名稱為:啟動 也有可能叫(Startup)的資料夾,然後把谷歌瀏覽器複製貼上到這個資料夾中。正常情況下這個辦法就可以了

edas spring cloud 啟動方式

IDE 中啟動 一 在 IDE 中啟動,通過 VM options 配置啟動引數 -Dvipserver.server.port=8080,通過 main 方法直接啟動。 二 如果你的輕量級配置中心與應用部署在不同的機器上,還需進行 hosts 繫結,詳情見輕量級配置中心。 FatJar 啟

Spring Boot 註解啟動方式

[email protected] @EnabeAutoConfiguration @ComponentScan<strong>package com.example.mypro

Activity設定啟動模式的方式

Activity的啟動模式用於設定任務棧管理其方式,通常有兩種方式設定Activity啟動模式。 一種是在AndroidManifest.xml檔案中的<activity>節點中設定android:launchMode屬性, 可以設定四種standard,si

啟動Activity方式

1、在一個Activity中呼叫startActivity()方法。這種方法 2、在一個Activity中呼叫startActivityRequest()方法。 重寫onActivityResult方法,用來接收B回傳的資料。 在B中回傳資料時採用setResult方法,並

springboot專案啟動成功後執行一段程式碼的方式

springboot專案啟動成功後執行一段程式碼的兩種方式   實現ApplicationRunner介面 package com.lnjecit.lifecycle; import org.springframework.boot.ApplicationArguments; i

springboot項目啟動成功後執行一段代碼的方式

參數 註解 etime mman pac cycle net org 啟動 springboot項目啟動成功後執行一段代碼的兩種方式 實現ApplicationRunner接口 package com.lnjecit.lifecycle; import

(轉)Activity和Fragment傳遞資料的方式

1、第一種方式,也是最常用的方式,就是使用Bundle來傳遞引數 MyFragment myFragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putString("DATA",values);//這裡的va

Java中建立和啟動執行緒的方式

方式1:繼承Thread類 步驟: 1):定義一個類A繼承於java.lang.Thread類. 2):在A類中覆蓋Thread類中的run方法. 3):我們在run方法中編寫需要執行的操作:run方法裡的程式碼,執行緒執行體. 4):在main方法(執行緒)中,建

[Android]Service和Activity雙向通訊的方式

本文原始碼:https://github.com/gitEkko/MyApplication.git Service簡介 Service是android 系統中的四大元件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟 A

java 啟動執行緒的方式

啟動執行緒肯定要用start()方法。當用start()開始一個執行緒後,執行緒就進入就緒狀態,使執行緒所代表的虛擬處理機處於可執行狀態,這意味著它可以由JVM排程並執行。這並不意味著執行緒就會立即執行。當cpu分配給它時間時,才開始執行run()方法(如果有的話)。ST

Spring Boot啟動之後,預設載入CommandLineRunner介面和註解方式PostContruct

其實從依賴注入的字面意思就可以知道,要將物件p注入到物件a,那麼首先就必須得生成物件p與物件a,才能執行注入。所以,如果一個類A中有個成員變數p被@Autowired註解,那麼@Autowired注入是發生在A的構造方法執行完之後的。如果想在生成物件時候完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴注入

android啟動介面的方式

2.直接在主頁中實現,這樣可能會好些,程式碼如下 package com.example.administrator.logopage; import android.app.Activity; import android.content.Intent; import android.support.v

Linux下chkconfig命令詳解即新增服務以及方式啟動關閉系統服務

chkconfig命令主要用來更新(啟動或停止)和查詢系統服務的執行級資訊。謹記chkconfig不是立即自動禁止或啟用一個服務,它只是簡單的改變了符號連線。 一、chkconfig 的使用語法 1、chkconfig [--add][--del][--list][系統

Java啟動執行緒方式總結

先檢視jdk幫助文件,這麼進行描述執行緒:執行緒是程式中的執行執行緒,可以由jvm來執行一個或者多個執行緒。方法1:繼承Thread 類 重寫run方法即可如下程式碼:public class Treadtest {//主方法public static void main(S

Android中,關於service的啟動方式描述不正確的是

     碰到群友問的一個問題,說:關於service的啟動兩種方式描述不正確的是(如圖)? 當時看到這個問題有點糾結,糾結內容如下: A 選項沒有疑問,官網就是這麼說的 B選項就是我所糾結的地方,這個呼叫者如果退出了,那麼如果在onDestroy()中呼叫了unbin

Windows下啟動關閉MySQL的方式(服務模式/非服務模式)

現在MySQL的最新版本是8.0 ,雖然提到支援了JSON什麼的效能很強,但你的系統如果很穩定還是不要變動,已踩過坑。此處使用 5.5.47進行測試; window服務模式 啟動mysql 的方式 比較穩定推薦的做法通過系統服務註冊。 如果你下載的版本是解壓版本,可以進

Spring Boot2 系列教程(十五)定義系統啟動任務的方式

在 Servlet/Jsp 專案中,如果涉及到系統任務,例如在專案啟動階段要做一些資料初始化操作,這些操作有一個共同的特點,只在專案啟動時進行,以後都不再執行,這裡,容易想到web基礎中的三大元件( Servlet、Filter、Listener )之一 Listener ,這種情況下,一般定義一個 Serv

線程的啟動方法,Runnable接口,run()的調用

ride 之前 線程終止 源碼解析 star 有意 tro thread類 override 實現並啟動線程有兩種方法1、寫一個類繼承自Thread類,重寫run方法。用start方法啟動線程2、寫一個類實現Runnable接口,實現run方法。用new Thread(Ru