将对象列表从一个活动传递到android中的另一个活动

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12092612/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 09:43:11  来源:igfitidea点击:

Pass list of objects from one activity to other activity in android

androidandroid-intent

提问by Sushant Bhatnagar

I want to pass a list of objects from one activity from another activity. I have one class SharedBookingBelow:

我想从另一个活动传递一个活动的对象列表。我有以下一类SharedBooking

public class SharedBooking {
  public int account_id;
  public Double betrag;
  public Double betrag_effected;
  public int taxType;
  public int tax;
  public String postingText;
}

Code from Calling activity:

来自呼叫活动的代码:

public List<SharedBooking> SharedBookingList = new ArrayList<SharedBooking>();

public void goDivision(Context context, Double betrag, List<SharedBooking> bookingList) {
  final Intent intent = new Intent(context, Division.class);    
  intent.putExtra(Constants.BETRAG, betrag);        
  intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  context.startActivity(intent);        
}

COde on called activity:

调用活动代码:

Bundle extras = getIntent().getExtras();
if (extras != null) {
  amount = extras.getDouble(Constants.BETRAG,0);
}

How can I send the list of SharedBooking from one activity and receive that on other activity?

如何从一项活动发送 SharedBooking 列表并在其他活动中接收该列表?

Please suggest me any usable link or sample code.

请建议我任何可用的链接或示例代码。

回答by Ruzin

First, make the class of the list implement Serializable.

首先,使列表的类实现Serializable

public class Object implements Serializable{}

Then you can just cast the list to (Serializable). Like so:

然后您可以将列表强制转换为 (Serializable)。像这样:

List<Object> list = new ArrayList<Object>();
myIntent.putExtra("LIST", (Serializable) list);

And to retrieve the list you do:

并检索您所做的列表:

Intent i = getIntent();
list = (List<Object>) i.getSerializableExtra("LIST");

That's it.

就是这样。

回答by Vineet Shukla

Use parcelable. Here is how you will do it:

使用可打包的。以下是您的操作方法:

public class SharedBooking implements Parcelable{

    public int account_id;
    public Double betrag;
    public Double betrag_effected;
    public int taxType;
    public int tax;
    public String postingText;

    public SharedBooking() {
        account_id = 0;
        betrag = 0.0;
        betrag_effected = 0.0;
        taxType = 0;
        tax = 0;
        postingText = "";
    }

    public SharedBooking(Parcel in) {
        account_id = in.readInt();
        betrag = in.readDouble();
        betrag_effected = in.readDouble();
        taxType = in.readInt();
        tax = in.readInt();
        postingText = in.readString();
    }

    public int getAccount_id() {
        return account_id;
    }
    public void setAccount_id(int account_id) {
        this.account_id = account_id;
    }
    public Double getBetrag() {
        return betrag;
    }
    public void setBetrag(Double betrag) {
        this.betrag = betrag;
    }
    public Double getBetrag_effected() {
        return betrag_effected;
    }
    public void setBetrag_effected(Double betrag_effected) {
        this.betrag_effected = betrag_effected;
    }
    public int getTaxType() {
        return taxType;
    }
    public void setTaxType(int taxType) {
        this.taxType = taxType;
    }
    public int getTax() {
        return tax;
    }
    public void setTax(int tax) {
        this.tax = tax;
    }
    public String getPostingText() {
        return postingText;
    }
    public void setPostingText(String postingText) {
        this.postingText = postingText;
    }
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(account_id);
        dest.writeDouble(betrag);
        dest.writeDouble(betrag_effected);
        dest.writeInt(taxType);
        dest.writeInt(tax);
        dest.writeString(postingText);

    }

    public static final Parcelable.Creator<SharedBooking> CREATOR = new Parcelable.Creator<SharedBooking>()
    {
        public SharedBooking createFromParcel(Parcel in)
        {
            return new SharedBooking(in);
        }
        public SharedBooking[] newArray(int size)
        {
            return new SharedBooking[size];
        }
    };

}

Passing the data:

传递数据:

Intent intent = new Intent(getApplicationContext(),YourActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("data", sharedBookingObject);
intent.putExtras(bundle);
startActivity(intent);

Retrieving the data:

检索数据:

Bundle bundle = getIntent().getExtras();
sharedBookingObject = bundle.getParcelable("data");

回答by Shahin ShamS

Parcelable object class

Parcelable 对象类

    public class Student implements Parcelable {

        int id;
        String name;

        public Student(int id, String name) {
            this.id = id;
            this.name = name;

        }

        public int getId() {
            return id;
        }

        public String getName() {
            return name;
        }


        @Override
        public int describeContents() {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public void writeToParcel(Parcel dest, int arg1) {
            // TODO Auto-generated method stub
            dest.writeInt(id);
            dest.writeString(name);
        }

        public Student(Parcel in) {
            id = in.readInt();
            name = in.readString();
        }

        public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
            public Student createFromParcel(Parcel in) {
                return new Student(in);
            }

            public Student[] newArray(int size) {
                return new Student[size];
            }
        };
    }

And the list

还有名单

ArrayList<Student> arraylist = new ArrayList<Student>();

Code from Calling activity

来自呼叫活动的代码

Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("mylist", arraylist);
intent.putExtras(bundle);       
this.startActivity(intent);

Code on called activity

调用活动的代码

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);   

    Bundle bundle = getIntent().getExtras();
    ArrayList<Student> arraylist = bundle.getParcelableArrayList("mylist");
}

回答by Hans Hohenfeld

You may want to implement the ParcelableInterface in your SharedBookingclass and add them to the Intent i.e. with the putParcelableArrayListExtraMethod. Check the documentation here:

您可能要实现Parcelable接口在SharedBooking类并将其添加到与该意图,即putParcelableArrayListExtra方法。检查这里的文档:

http://developer.android.com/reference/android/content/Intent.html#putParcelableArrayListExtra%28java.lang.String,%20java.util.ArrayList%3C?%20extends%20android.os.Parcelable%3E%29

http://developer.android.com/reference/android/content/Intent.html#putParcelableArrayListExtra%28java.lang.String,%20java.util.ArrayList%3C?%20extends%20android.os.Parcelable%3E%29