簡體   English   中英

我可以在Android中沒有意圖的情況下在活動之間移動對象嗎?

[英]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()

android dev docs中所述

從技術上講,如果對對象進行序列化(例如,將它們轉換為json對象並在prefs中傳遞字符串),則也可以通過sharedPrefs傳遞對象,但這實際上並不是這樣做的方式。

是的,你可以做到。 例如:創建一個獨立的Java類

Class C {
  public static ArrayList<YourObject> myList;

}

導入C類頭

enter code here
Class B {
   myList.add()
}

導入C類頭

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()方法中從應用程序類獲取數據,然后執行所需的任何操作。

請按照以下步驟操作:

  1. 只需使用startActivityForResult方法而不是startActivity啟動活動B
  2. 然后在活動A中覆蓋onActivityResult。
  3. 當您想完成活動或onBackPressed活動B時,只需在setResult方法中使用intent傳遞數據

有關完整的文檔,您可以查看以下鏈接: 從活動獲取結果

因此,每當活動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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM