如何将对象列表的列表从一个活动传递到另一个活动

时间:2015-11-04 07:46:53

标签: android

我需要传递一个arraylist,其中包含带有字符串和arraylist的对象。我无法将arraylist传递给其他活动。在Activity1中,列表包含我已验证的值。

DepositBn:

package support;

import android.os.Parcel;
import android.os.Parcelable;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;

public class DepositBn implements Parcelable {

private String limit;
@SerializedName("period")
private ArrayList<Rate> rateList;

protected DepositBn(Parcel in) {
    limit = in.readString();
}

public String getLimit() {
    return limit;
}

public void setLimit(String limit) {
    this.limit = limit;
}

public ArrayList<Rate> getRateList() {
    return rateList;
}

public void setRateList(ArrayList<Rate> rateList) {
    this.rateList = rateList;
}

public class Rate {
    private String rate;

    public String getRate() {
        return rate;
    }

    public void setRate(String rate) {
        this.rate = rate;
    }

}
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(limit);
}
public static final Creator<DepositBn> CREATOR = new Creator<DepositBn>() {
    @Override
    public DepositBn createFromParcel(Parcel in) {
        return new DepositBn(in);
    }

    @Override
    public DepositBn[] newArray(int size) {
        return new DepositBn[size];
    }
};

}

在Activity1中:

@Override
    protected void onPostExecute(ArrayList<DepositBn> result) {
        super.onPostExecute(result);
        System.out.println("result = " + result);
        for (DepositBn depositBn : result) {
            System.out.println("----" + depositBn.getLimit());
        }
        try {
            Intent intent = new Intent(DepositRates.this, GenericRateDisplay.class);
            Resources res = DepositRates.this.getResources();

            Bundle bundle = new Bundle();
            bundle.putParcelableArrayList("depositBnArrayList",result);
            bundle.putString("pageName", res.getString(R.string.domesticRates));
            intent.putExtras(bundle);


            startActivity(intent);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

在Activity2中:

package in.co.sbm.sbmvirtual;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

import support.DepositBn;

public class GenericRateDisplay extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_generic_rate_display);

    Bundle b = this.getIntent().getExtras();

    ArrayList<DepositBn> depositBnArrayList = b.getParcelableArrayList("depositBnArrayList");
    //String pageName = b.getString("pageName");

    ArrayList<String> rateList = new ArrayList();

    for (DepositBn depositBn : depositBnArrayList) {
        for(DepositBn.Rate rate : depositBn.getRateList()){
            rateList.add(rate.toString());
        }
    }

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(GenericRateDisplay.this,
            android.R.layout.simple_list_item_1, rateList);
    ListView listView = (ListView) findViewById(R.id.genericListView);
    listView.setAdapter(adapter);
}

}

1 个答案:

答案 0 :(得分:1)

我修好了。我也使用了内部类,我没有序列化,因此我无法使用putSerializable。我已经序列化了外部类和内部类,并使用了intent.putSerializable。