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

后端 未结 7 1619
轻奢々
轻奢々 2020-12-01 01:35

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

public class SharedBooking {         


        
相关标签:
7条回答
  • 2020-12-01 01:55

    You can also convert the list to a String using Gson, then pass it like so:

    String yourListAsString = new Gson().toJson(yourList);
    bundle.putString("data",yourListAsString);
    

    Then retrieve it back using your class as the type:

    List<YourList> listName = new Gson().fromJson("data", new TypeToken<List<YourList>>(){}.getType());
    
    0 讨论(0)
  • 2020-12-01 01:56

    Parcelable object class

        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");
    }
    
    0 讨论(0)
  • 2020-12-01 02:03

    You may want to implement the Parcelable Interface in your SharedBooking class and add them to the Intent i.e. with the putParcelableArrayListExtra Method. Check the documentation.

    0 讨论(0)
  • 2020-12-01 02:04

    First, make the class of the list implement Serializable.

    public class MyObject implements Serializable{}
    

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

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

    And to retrieve the list you do:

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

    That's it.

    0 讨论(0)
  • 2020-12-01 02:15

    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");
    
    0 讨论(0)
  • 2020-12-01 02:15

    If there is someone who is looking for answer this is how i implemented it using Kotlin.

    Parcelable object class

    data class CollectedMilk(
        @SerializedName("id")
        var id: Int,
        @SerializedName("igicuba")
        var igicuba: Int,
        @SerializedName("collector")
        var collector: String?,
        @SerializedName("collected")
        var collected: Int,
        @SerializedName("accepted")
        var accepted: Int,
        @SerializedName("standard")
        var standard: String?,
        @SerializedName("created_at")
        var created_at: String?,
        @SerializedName("updated_at")
        var updated_at: String?,
    ): Parcelable {
    
        constructor(parcel: Parcel) : this(
            parcel.readInt(),
            parcel.readInt(),
            parcel.readString(),
            parcel.readInt(),
            parcel.readInt(),
            parcel.readString(),
            parcel.readString(),
            parcel.readString()
        )
    
        override fun describeContents(): Int {
            return 0
        }
    
        override fun writeToParcel(parcel: Parcel?, int: Int) {
            parcel?.writeInt(id)
            parcel?.writeInt(igicuba)
            parcel?.writeString(collector)
            parcel?.writeInt(collected)
            parcel?.writeInt(accepted)
            parcel?.writeString(standard)
            parcel?.writeString(created_at)
            parcel?.writeString(updated_at)
        }
    
        companion object CREATOR : Parcelable.Creator<CollectedMilk> {
            override fun createFromParcel(parcel: Parcel): CollectedMilk {
                return CollectedMilk(parcel)
            }
    
            override fun newArray(size: Int): Array<CollectedMilk?> {
                return arrayOfNulls(size)
            }
        }
    }
    

    Then in Fragment

    collectedMilkAdapter.onItemClick = { collectedMilk ->
                Toast.makeText(
                    MccApp.applicationContext(),
                    "Collector: " + collectedMilk.collector,
                    Toast.LENGTH_LONG
                ).show()
    
                val intent = Intent(MccApp.applicationContext(), CollectedMilkActivity::class.java)
                val bundle: Bundle = Bundle()
    
                bundle.putParcelableArrayList("collectedMilk", collectedMilkArrayList)
                intent.putExtras(bundle)
    
                activity?.startActivity(intent)
            }
    

    Then on another Activity my Detail Activity

    Global Variable

    private lateinit var collectedMilk: ArrayList<CollectedMilk>
    

    In Function or OnCreate Activity

    val bundle = intent.extras
            collectedMilk = (bundle?.getParcelableArrayList<CollectedMilk>("collectedMilk") as ArrayList<CollectedMilk>)
    
            Toast(this).showCustomToast(
                this,
                ""+collectedMilk,
                dark
            ) 
    
    0 讨论(0)
提交回复
热议问题