【问题标题】:Custom object from an activity to another从一个活动到另一个活动的自定义对象
【发布时间】:2015-04-27 14:44:39
【问题描述】:

我在尝试将信息从一个活动发送到另一个活动时遇到了一些问题。我想发送一些自定义对象。由于优化,我将它们加载到我的第一个活动中,但现在我想将它们放入将使用它们的活动中,所以我的想法是添加额外内容并获得这些额外内容但我无法获得它们,因为我真的没有知道如何将 put extra 用于自定义方法

这是我的对象:

public class VMyCode{

  private String name;
  private ArrayList<GeneticStep> code;
  private int image;

  public VMyCode(){
      this.name = null;
      this.code = null;
      this.image = -1;
  }

  public VMyCode(String name, ArrayList<GeneticStep> code, int image){
      this.name = name;
      this.code = code;
      this.image = image;
  }

  public int getImage() {
      return image;
  }

  public String getName() {
      return name;
  }

  public ArrayList<GeneticStep> getCode() {
      return code;
  }

  public void setName(String name) {
      this.name = name;
  }

  public void setCode(ArrayList<GeneticStep> code) {
      this.code = code;
  }

  public void setImage(int image) {
      this.image = image;
  }
}

我想要做的是从第一个活动发送 VMyCode 的 ArrayList 并在另一个活动中获取它。

我试图让我的对象实现 Serializable 和 getSerializableExtras 转换为 ArrayList,但看起来不起作用。

如果有人有什么想法,请随时分享!谢谢

Ps : 对不起我的英语。

【问题讨论】:

    标签: java android android-activity


    【解决方案1】:

    这样做的一个正确方法是在你的类中实现 Parcelable。 这个答案显示了如何实现它:

    https://stackoverflow.com/a/7181792/2534007

    您可以按照上面答案中的说明手动执行此操作,也可以使用它 http://www.parcelabler.com/ 直接提供 Parcelable 的实现。

    之后,您可以通过意图将您的对象作为额外的对象传递。

    【讨论】:

    • 嗯,非常感谢,做我想做的事!一个小问题仍然存在:我的自定义对象 VMyCode 使用自定义对象 GeneticStep,它是否也应该实现 Parcelable?如果是这样,我的所有自定义对象是否应该在 VMyCode 或 GeneticStep 实现 Parcelable 可能使用的对象中使用?
    • 是的,您必须在这些类中实现 Parcelable。请参考这个问题,它将帮助您使用自定义可打包类实现列表:stackoverflow.com/questions/14178736/…
    【解决方案2】:

    将核心或 bean 类设为可打包,以便您可以在组件之间发送对象。

    这是parcelable example的例子

    【讨论】:

      【解决方案3】:

      实现 Parcelable 并使用 Intents 传递自定义对象。

      【讨论】:

        【解决方案4】:

        您可以使用 parceble: 正如之前所做的那样:

        setclass d = new setclass ();
                        d.setDt(5);
                        LinkedHashMap<String, Object> obj = new LinkedHashMap<String, Object>();
                        obj.put("hashmapkey", d);
                    Intent inew = new Intent(SgParceLableSampelActivity.this,
                            ActivityNext.class);
                    Bundle b = new Bundle();
                    b.putSerializable("bundleobj", obj);
                    inew.putExtras(b);
                    startActivity(inew);
        

        以及在另一个活动中获取值:

        try {  setContentView(R.layout.main);
                    Bundle bn = new Bundle();
                    bn = getIntent().getExtras();
                    HashMap<String, Object> getobj = new HashMap<String, Object>();
                    getobj = (HashMap<String, Object>) bn.getSerializable("bundleobj");
                    setclass  d = (setclass) getobj.get("hashmapkey");
                } catch (Exception e) {
                    Log.e("Err", e.getMessage());
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-12
          • 2014-12-05
          • 2012-08-04
          • 1970-01-01
          • 1970-01-01
          • 2012-09-04
          • 1970-01-01
          • 2012-10-11
          相关资源
          最近更新 更多