![](/img/trans.png)
[英]How do I iterate through a Hashtable, then add the objects to an ArrayList?
[英]How do I iterate through an ArrayList of custom objects from Intent and add them into LinearLayout?
我在意圖中有一個自定義 FlightData 對象的 ArrayList。 我加載了意圖並將 arraylist 作為 null,foreach 循環也迫使我使用Object
作為類型。
將 arraylist 保存到意圖中:
intent.putParcelableArrayListExtra("FlightDataList", (ArrayList<? extends Parcelable>) flightDataList);
加載意圖:
Intent intent = getIntent();
LinearLayout layout_datasheet = findViewById(R.id.layout_datasheet);
List flightDataList = intent.getParcelableArrayListExtra("FlightDataList");
if (flightDataList == null){
Log.d("flightDataList_size", "FlightDataList is null"); // this fires
}
assert flightDataList != null;
for (Object data : flightDataList){
data = (FlightData) data; // items in list are of type FlightData
TextView tv = new TextView(this);
tv.setText(data.toString());
layout_datasheet.addView(tv);
}
我的自定義類的可打包函數(x,y,時間,有 getters-setters):
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeDouble(x);
dest.writeDouble(y);
dest.writeDouble(time);
}
public static final Creator<FlightData> CREATOR = new Creator<FlightData>() {
@Override
public FlightData createFromParcel(Parcel in) {
return new FlightData(in);
}
@Override
public FlightData[] newArray(int size) {
return new FlightData[size];
}
};
1.首先在您的 FlightData object model / pojo / class 中實現 Parceable
val flightDataList= ArrayList<FlightData>()
3. val args = Bundle()
4. args.putParcelableArrayList("FlightDataList", flightDataList)
intent.putExtra(args)
然后獲取列表
val flightDataList = context.getIntent().getExtras().getParcelableArrayList("FlightDataList")
您是否嘗試創建一個實現 parcelable 的數據結構?
public class flightDataList implements Parcelable{
String dataThingyString;
int dataThingyInt;
public flightDataList(String dataThingyString, int dataThingyInt){
this.dataThingyString = dataThingyString;
this.dataThingyInt = dataThingyInt;
}
public flightDataList(Parcle in){
this.dataThingyString = in.readString();
this.dataThingyInt = in.readInt();
}
@Override
public void writeToParcel(Parcel dest, int flags){
dest.writeString(dataThingyString);
dest.writeInt(dataThingyInt);
}
public static final Creator<flightDataList> CREATOR = new Creator<flightDataList>(){
@Override
public flightDataList createFromParcel(Parcel source){
return new flightDataList(source);
}
@Override
public flightDataList[] newArray(int size){
return new flightDataList[size];
}
}
public void setdataThingyString(String stringData){
this.dataThingyString = stringData;
}
public void setdataThingyInt(int intData){
this.dataThingyInt = intData;
}
public String getdataThingyString(){
return dataThingyString;
}
public int getdataThingyInt(){
return dataThingyInt;
}
@Override
public int describeContents(){
return 0;
}
}
它應該工作。 我在您的示例中唯一缺少的是構造函數。 它可以解釋你得到的null
。
嘗試為FlightData
添加此構造函數
public FlightData(Parcel in) {
x = in.readDouble();
y = in.readDouble();
time = in.readDouble();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.