将 ParcebleArrayList 放入 Bundle 中以调用新的意图

Put a ParcebleArrayList into a Bundle to call a new intent

我正在尝试将此 class 放入一个数组中并将其发送到一个包中 bundle.putParcelableArrayList , 有什么建议吗?

这是我正在实施的 class Parcelable

package neocom.dealerbook.model;


import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by viana.wesley on 30/03/15.
 */
public class LojaHeader implements Parcelable {

    private int id;
    private int idOriginal;
    private int logo;
    private String nome;
    private String endereco;

    public LojaHeader() {
    }

    public LojaHeader(Parcel source){
        id = source.readInt();
        idOriginal = source.readInt();
        logo = source.readInt();
        nome = source.readString();
        endereco = source.readString();
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(id);
        parcel.writeInt(idOriginal);
        parcel.writeInt(logo);
        parcel.writeString(nome);
        parcel.writeString(endereco);
    }

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


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getIdOriginal() {
        return idOriginal;
    }

    public void setIdOriginal(int idOriginal) {
        this.idOriginal = idOriginal;
    }

    public int getLogo() {
        return logo;
    }

    public void setLogo(int logo) {
        this.logo = logo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public static final Parcelable.Creator<LojaHeader> CREATOR = new Parcelable.Creator<LojaHeader>(
        @Override
        public LojaHeader createFromParcel(Parcel parcel) {
            return new LojaHeader(parcel);
        }

        @Override
        public LojaHeader[] newArray(int i) {
            return new LojaHeader[i];
        }
    };

}

我是这样称呼这个意图的。

public void callPointListActivity(View view) {
        List<Marker> markers = mMap.getMarkers();
        ArrayList<LojaHeader> lojaHeaders = new ArrayList<>();
        Log.d(TAG, markers.toString());

        for (Marker m : markers){
            Loja loja = m.getData();
            lojaHeaders.add(loja.getLojaHeader());
        }


        Intent intent = new Intent(getActivity(), PointListActivity.class);
        Bundle bundle = new Bundle();
        bundle.putParcelableArrayList("LojaHeader", lojaHeaders);
        startActivity(intent, bundle);

    }

我遇到了这个错误

Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: neocom.dealerbook.model.LojaHeader
            at android.os.Parcel.readException(Parcel.java:1474)
            at android.os.Parcel.readException(Parcel.java:1426)
            at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2115)
            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1536)
            at android.app.Activity.startActivityFromFragment(Activity.java:3957)
            at android.app.Fragment.startActivity(Fragment.java:1050)
            at neocom.dealerbook.MapFragment.callPointListActivity(MapFragment.java:701)
            at neocom.dealerbook.MapActivity.callPointListActivity(MapActivity.java:95)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View.onClick(View.java:3825)
            at android.view.View.performClick(View.java:4445)
            at android.view.View$PerformClick.run(View.java:18446)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5146)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
            at dalvik.system.NativeStart.main(Native Method)

您将数据错误地添加到意图中。您正在呼叫 startActivity(Intent, Bundle)。在这种情况下,BundlestartActivity() 调用的选项。你想这样做,

Intent intent = new Intent(getActivity(), PointListActivity.class);
intent.putParcelableArrayListExtra("LojaHeader", lojaHeaders);
startActivity(intent); 

ClassNotFoundException 是因为框架试图解包选项 Bundle 但找不到你的 class 因为它不在 Android 框架中。