0

我使用Android Studio中建立一個Android應用程序。 假設我有Activity1和Activity2。 Activity2有3個片段(3個選項卡)。 我設法通過從活性1至活性2,然後從活性2到它通過使用一個片段適配器的片段的數據。安卓:有3個片段從活動數據傳遞到先前的活動

1) 我想做相反的事情:從所有3個片段中收集數據並將它傳遞給它們所在的活動(Activity2),然後將數據從Activity2傳回給Activity1。

我已經實現從一個片段數據傳遞給活性2的接口,但如何(以及何時)我可以通過從所有3個片段數據,以活性2? 我寫的方法將片段中的對象發送到Activity2。但在活性2的方法獲取只有一個對象... 或許有一種方法可以讓我從片段中的數據發送到活性2片段適配器? (這可以是我認爲最好的......)

2) 將數據從Activity2傳回Activity1的最好方法是重寫「onBackPressed」並使用startActivityForResult和setResult? (除了ActionBar「後退按鈕」,我沒有一個按鈕可以做到這一點)。

謝謝!

+0

startActivityForResult爲您提供了處理每一項活動回報的機會。所以,你不必擔心活動返回值的混亂。 – metzelder

回答

0

您可以從所有的3個片段的數據存儲到共享偏好並獲得活動1.數據應該從共享偏好,一旦你檢索清除數據。

+0

我在哪裏得到Activity1中的數據?它是否在onResume? –

+0

是的,你可以在onResume中獲取數據 –

1

1)您可以使用3種方法創建接口,如:setResult1(),setResult2()setResult3(),並讓您的Activity實現此接口,以便它可以在可用時立即收集3個碎片的結果。一旦結果發生變化,碎片應該在這個界面中調用它們自己的方法,並且在恢復後(在重新創建「活動」的情況下,例如更改方向時)。

2)對於活性2將結果發送回活動1,最好的辦法就是從開始活性2活性1startActivityForResult()。然後,每一個新的結果是通過收集活性2時間應該調用setResult(int resultCode, Intent Data)。您可以多次調用它來替換以前的結果。如果立即設置結果,則不需要覆蓋onBackPressed()

1

我的建議是創建一個用於存儲和傳遞數據的新類,並且該類可以被任何活動或片段訪問。該類必須是單例,因此相同的數據由不同的活動和片段共享。

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(上下文).getData()/保存數據(數據)

在這種情況下,數據被存儲在內存,您可以重寫該組並獲取功能將數據保存到任何需要的位置,例如SDCARD或數據庫。

相關問題