33

いくつかのトピックを検索しましたが、問題の解決策が見つかりませんでした。

public class Series implements Parcelable {
private String name;
private int numOfSeason;
private int numOfEpisode;

/** Constructors and Getters/Setters have been removed to make reading easier **/

public Series(Parcel in) {
    String[] data = new String[3];
    in.readStringArray(data);
    this.name = data[0];
    this.numOfSeason = Integer.parseInt(data[1]);
    this.numOfEpisode = Integer.parseInt(data[2]);
}


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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeStringArray(new String[] { this.name,
            String.valueOf(this.numOfSeason),
            String.valueOf(this.numOfEpisode) });

}

private void readFromParcel(Parcel in) {
    name = in.readString();
    numOfSeason = in.readInt();
    numOfEpisode = in.readInt();
}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    @Override
    public Series createFromParcel(Parcel in) {
        return new Series(in);
    }

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

}

MainActivity には ArrayList があります。リストを動的に編集可能にするには、リストを編集可能な別のアクティビティに渡す必要があります。

ArrayList<Series> listOfSeries = new ArrayList<Series>();

    public void openAddActivity() {
    Intent intent = new Intent(this, AddActivity.class);
    intent.putParcelableArrayListExtra(
            "com.example.episodetracker.listofseries",
            (ArrayList<? extends Parcelable>) listOfSeries);
    startActivity(intent);
}

リストをキャストする必要があります。そうしないと、Eclipse から次のエラー メッセージが表示されます。 タイプ Intent のメソッド putParcelableArrayListExtra(String, ArrayList) は、引数 (String, List) には適用されません

これは正しい方法ですか?

    ArrayList<Series> list = savedInstanceState
            .getParcelableArrayList("com.example.episodetracker.listofseries");

これは、別のアクティビティでデータを読み取ろうとする方法です。

上の行でクラッシュしています。つまり、getParcelableArrayList 部分です。

4

6 に答える 6

42
  • 問題は、パーセルへの書き込みとパーセルからの読み取りにあります...

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(numOfSeason);
        dest.writeInt(numOfEpisode);
    }
    
    private void readFromParcel(Parcel in) {
        name = in.readString();
        numOfSeason = in.readInt();
        numOfEpisode = in.readInt();
    }
    
  • 書いたものは、読んだものと一致しなければなりません...

    @Override
     protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    Intent i = new Intent(this,SecondActivity.class);
    
    ArrayList<testparcel> testing = new ArrayList<testparcel>();
    
    i.putParcelableArrayListExtra("extraextra", testing);
    startActivity(i);
    }
    
        /**********************************************/
    
    
    public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ArrayList<testparcel> testing = this.getIntent().getParcelableArrayListExtra("extraextra");
     }
    }
    
  • 上記のコードには、2 つの異なるアクティビティからの onCreate() があります。最初のものは 2 番目のものを起動します。問題なく動作し、小包を問題なくプルすることができました。

于 2013-02-28T14:36:02.623 に答える
3

クラスでputParcelableArrayListExtra()メソッドを使用する必要があります。Intent

于 2013-02-28T10:33:57.840 に答える
3

オブジェクトputParcelableArrayList(<? extends Parcelable>)から使用しました。Bundleインテント オブジェクトから直接ではありません (何が違うのかよくわかりません)。しかし、私はこのように使用します:

ArrayList<ParcelableRow> resultSet = new ArrayList<ParcelableRow>();
resultSet = loadData();

Bundle data = new Bundle();
data.putParcelableArrayList("search.resultSet", resultSet);
yourIntent.putExtra("result.content", data);
startActivity(yourIntent);

後で新しいアクティビティで、Bundle オブジェクトに最近挿入されたデータを次のように入力できます。

Bundle data = this.getIntent().getBundleExtra("result.content");
ArrayList<ParcelableRow> result = data.getParcelableArrayList("search.resultset");

ArrayList<>パーセル可能なオブジェクトのみを含める必要があることを覚えておいてください。問題を回避するために、受信したデータがnullかどうかを確認することができます。

于 2013-03-14T22:58:52.453 に答える
0

多分これは誰かを助ける..そうでなければ私の問題は、私がwriteとreadValueを使用したことでしたが、writeInt、readInt writeString、readStringなどのタイプと一致する必要があります

于 2015-07-25T13:46:50.863 に答える
0

Parcelable ArrayList を渡すことができます

送信者アクティビティ ->

startActivity(Intent(this, SenderActivity::class.java).apply { putExtra("getList",list)})

レシーバー アクティビティ ->

private lateinit var list: ArrayList<List>

list = this.intent.extras?.getParcelableArrayList("getList")!!

そして、リスト内のすべての Arraylist を取得します。

于 2020-01-08T18:08:52.650 に答える