我可以在Android中没有意图的活动之间移动对象吗?

时间:2014-10-15 07:27:41

标签: java android object android-intent

重点是,从活动A到BI需要每次都创建活动B,但我不会关闭活动A,因为当我从B返回活动A时,我只是完成了活动B但我没有&#39 ;创建活动A因为我没有完成它。这就是我想要的。

问题是当我尝试将数据和对象从活动B传递到A.我不能使用意图和putExtra(),因为我没有启动活动A,我只是用onResume恢复它( )。

SharedPreferences不允许我传递对象,所以有人知道是否有任何方法可以将对象从B传递给A?

解决方案: http://www.javatpoint.com/android-startactivityforresult-example

感谢@brightstar @ThMBc @Avtar Guleira @Edy Bolos,我正在寻找:)

8 个答案:

答案 0 :(得分:3)

您可以使用startActivityForResult启动活动B,然后从其返回到您的意图内的数据。你可以在这里找到例子:

http://developer.android.com/reference/android/app/Activity.html

答案 1 :(得分:1)

针对不同情况有不同的方法。如果在B中创建的对象将在应用程序范围内使用,您可以考虑将其提供给应用程序,以便每个活动都可以通过

来实现。
.getAppliction().getMyField() 

请注意,在一般类中使用静态字段几乎可以归结为同样的事情,但这遵循封装规则。

如果B仅仅是为了创建结果对象而启动,那么开始一个结果活动就是要走的路,正如brightstar所说:

.startActivityForResult()

android dev docs

中所述

从技术上讲,如果你对它们进行序列化(例如将它们转换为json对象并在prefs中传递一个字符串),你也可以通过sharedPrefs传递对象,但这并不是人们这样做的方式。

答案 2 :(得分:0)

是的,你可以做到。 例如: 创建一个独立的java类

Class C {
  public static ArrayList<YourObject> myList;

}

导入C类标题

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

导入C类标题

Class A{
 myList.get(index)

}

答案 3 :(得分:0)

使用Singleton-Class存储和检索对象。

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中检索它们

答案 4 :(得分:0)

您可以创建另一个并创建静态属性,这些属性将保留您的对象。请看。

Class Utils {
  public static MyObject object;
  public static int index;
}

一样使用它
Utils.object = new MyObject();
Utils.index = 4;

答案 5 :(得分:0)

您不能按照您的方案传输对象,因为您不直接调用活动A(意味着开始活动)。您可以通过其他方式实现此方案。您必须在Activity B中设置/保存Application类中的数据,然后您可以在activiy A onResume()方法中从应用程序类获取数据并执行您想要的任何操作。

答案 6 :(得分:0)

按照以下步骤操作:

  1. 使用startActivityForResult方法而不是启动Activity B. startActivity
  2. 然后覆盖活动A中的onActivityResult。
  3. 当您想要完成或onBackPressed活动B.只需使用intent传递数据 在setResult方法
  4. 有关完整文档,您可以查看以下链接: Getting a Result from an Activity

    因此,当活动B完成时,OnActivityResult将被调用活动A.在这个方法中,你将获得你从活动B设置的意图。你可以随心所欲地做任何人。

答案 7 :(得分:0)

请不要使用静态字段!!!这真的很糟糕,你可能会遇到并发问题。 您可以通过使用startActivityForResult启动活动B来轻松完成您的请求,然后在活动B中,您可以通过覆盖onActivityResult方法来捕获结果,如下所述:http://developer.android.com/reference/android/app/Activity.html#StartingActivities