[英]Can I move objects between activities without intents in Android?
關鍵是,從活動A到BI每次都需要創建活動B,但是我不會關閉活動A,因為當我從活動B返回活動A時,我只是完成了活動B,但是我不創建活動A,因為我沒有完成。 那就是我想要的。
問題是,當我嘗試將數據和對象從活動B傳遞到A時,由於無法啟動活動A,因此無法使用intent和putExtra(),而只是使用onResume()恢復它。
SharedPreferences不允許我傳遞對象,所以有人知道是否有任何方法可以將對象從B傳遞給A?
解決方案: http : //www.javatpoint.com/android-startactivityforresult-example
感謝@brightstar @ThMBc @Avtar Guleira @Edy Bolos我一直在尋找它:)
您可以使用startActivityForResult啟動活動B,然后將其在intent中的數據從活動B返回到A。 您可以在此處找到示例:
http://developer.android.com/reference/android/app/Activity.html
對於不同的情況有不同的方法。 如果要在B中創建的對象將在整個應用程序中使用,則可以考慮將其提供給應用程序,以便每個活動都可以通過
.getAppliction().getMyField()
注意,在通用類中使用靜態字段幾乎可以歸結為同一件事,但這遵循了封裝規則。
如果B純粹是為了創建結果對象而啟動的,那么為結果啟動活動是必須走的路,正如Brightstar所說:
.startActivityForResult()
從技術上講,如果對對象進行序列化(例如,將它們轉換為json對象並在prefs中傳遞字符串),則也可以通過sharedPrefs傳遞對象,但這實際上並不是這樣做的方式。
是的,你可以做到。 例如:創建一個獨立的Java類
Class C {
public static ArrayList<YourObject> myList;
}
enter code here
Class B {
myList.add()
}
Class A{
myList.get(index)
}
使用Singleton類存儲和檢索對象。
public class Model {
private static Model model = null;
private Object myObject;
private Model() {}
public static Model getInstance() {
if (model == null) {
model = new Model();
}
return model;
}
public Object getMyObject(){
return myObject;
}
public setMyObject(Object myObject){
this.myObject = myObject;
}
}
當您處於活動A中時,可以將所需的對象存儲在模型中,然后在活動B中進行檢索。
您可以創建另一個類並創建將為您保留對象的靜態屬性。 敬請期待。
Class Utils {
public static MyObject object;
public static int index;
}
像這樣使用
Utils.object = new MyObject();
Utils.index = 4;
您不能按照您的方案傳輸對象,因為您沒有直接調用Activity A(意味着startactivity)。您可以通過另一種方式來實現此方案。 您必須在活動B的應用程序類中設置/保存數據,然后才能在活動A的onResume()方法中從應用程序類獲取數據,然后執行所需的任何操作。
請按照以下步驟操作:
有關完整的文檔,您可以查看以下鏈接: 從活動獲取結果
因此,每當活動B完成時,就會調用活動A的OnActivityResult。在這種方法中,您將獲得從活動B中設置的Intent。然后您可以執行任何操作。
請只是不要使用靜態字段!!! 這確實是不好的做法,您可能會遇到並發問題。 您可以通過使用startActivityForResult啟動活動B輕松完成請求,然后在活動B中通過覆蓋onActivityResult方法來捕獲結果,如此處所述: http : //developer.android.com/reference/android/app/Activity。 HTML#StartingActivities
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.