![](/img/trans.png)
[英]How to pass data from container activity to its child fragments in android?
[英]Android: pass data from activity with 3 fragments to previous activity
我正在使用Android Studio構建一個Android應用程序。 假設我有Activity1和Activity2。 活動2有3個片段(3個標簽)。 我設法通過使用片段適配器將數據從Activity1傳遞到Activity2,然后從Activity2傳遞給它的片段。
1)我想做相反的事情:從所有3個片段中收集數據,並將其傳遞給他們坐在(Activity2)的活動,然后將數據從Activity2傳遞回Activity1。
我實現了一個將數據從一個片段傳遞到Activity2的接口,但是如何(以及何時)將所有3個片段的數據傳遞給Activity2? 我編寫的方法將一個對象從片段發送到Activity2。 但是Activity2中的方法僅獲得一個對象……或者也許有一種方法可以將數據從片段發送到Activity2片段適配器? (這可能是我認為最好的...)
2)將數據從Activity2傳遞回Activity1的最佳方法是重寫“ onBackPressed”並使用startActivityForResult和setResult嗎? (除了ActionBar的“后退按鈕”之外,我沒有其他按鈕可以執行此操作)。
謝謝!
1)您可以使用以下3種方法創建接口: setResult1()
, setResult2()
和setResult3()
並讓您的Activity實現此接口,以便它可以在3個片段可用時立即收集它們的結果。 片段應在結果更改后以及恢復后(在重新創建“活動”(如更改方向)時)在此接口中調用其自己的方法。
2)為了使Activity2將結果發送回Activity1 ,最好的方法是使用startActivityForResult()
從Activity1啟動Activity2 。 然后,每次Activity2收集新結果時,都應調用setResult(int resultCode, Intent Data)
。 您可以多次調用它來替換以前的結果。 如果立即設置結果,則無需覆蓋onBackPressed()
。
我的建議是創建一個用於存儲和傳遞數據的新類,並且任何活動或片段都可以訪問該類。該類必須是單例,因此相同的數據可以由不同的活動和片段共享。
public static DataCache instance;
private UserInfo user; //here's the data you want to save
private DataCache(Context c){
this.user=new UserInfo();
}
public static DataCache getInstance(Context c){
if(null==instance){
instance=new DataCache(c);
}
return instance;
}
public void setData(UserInfo data){
this.user=user;
}
public UserInfo getData(){
return user;
}
您可以使用它來保存或獲取來自任何活動或片段的數據:DataCache.getInstance(context).getData()/ saveData(data)
在這種情況下,數據存儲在內存中,您可以重寫set和get函數以將數據保存到所需的任何位置,例如SDCARD或數據庫。
您可以將所有3個片段中的數據存儲到共享的首選項中,並在活動1中獲取該數據。檢索后,應從共享的首選項中清除數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.