[解決済み] カスタムオブジェクトをParcelableにするにはどうすればよいですか?
2022-03-16 12:16:17
質問
オブジェクトをParcelableにしようとしています。しかし、私はカスタムオブジェクトを持っており、それらのオブジェクトは
ArrayList
属性は、私が作成した他のカスタムオブジェクトの属性です。
どうすればいいでしょうか?
どのように解決するのですか?
いくつかの例をご覧いただけます。 ここで , ここ(コードはここから引用しています) そして こちら .
このためにPOJOクラスを作成することができますが、いくつかの余分なコードを追加する必要があります。
Parcelable
. 実装をご覧ください。
public class Student implements Parcelable{
private String id;
private String name;
private String grade;
// Constructor
public Student(String id, String name, String grade){
this.id = id;
this.name = name;
this.grade = grade;
}
// Getter and setter methods
.........
.........
// Parcelling part
public Student(Parcel in){
String[] data = new String[3];
in.readStringArray(data);
// the order needs to be the same as in writeToParcel() method
this.id = data[0];
this.name = data[1];
this.grade = data[2];
}
@Оverride
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {this.id,
this.name,
this.grade});
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
このクラスを作成すると、このクラスのオブジェクトを簡単に
Intent
のように、このオブジェクトをターゲットアクティビティで回収します。
intent.putExtra("student", new Student("1","Mike","6"));
ここで、student はバンドルからデータを切り離すために必要なキーです。
Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");
この例では
String
の型があります。しかし、どのような種類のデータも並べることができます。試してみてください。
関連
-
[解決済み】このアクティビティでは、Theme.AppCompatテーマ(またはその子孫)を使用する必要があります。
-
Android.mk:7: *** セパレータがありません。
-
Gradle の同期に失敗しました。com.android.tools.build:gradle が見つかりませんでした。
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] TextViewのリンクをクリック可能にする方法
-
[解決済み] EditTextのアンダーバーを非表示にする方法
-
[解決済み] Parcelableインターフェイスを実装した場合のbooleanの読み書きの方法を教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
android.os の NetworkOnMainThreadException。
-
AndroidStudio reports Could not resolve all artifacts for configuration ':app:classpath'.
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
エラー:未宣言の識別子(AS)の使用
-
repo: コマンドが見つかりません
-
Android ProgressBarのスタイルカラーを変更する
-
Android基本アプレット
-
Android--shape--描画のコーナー、グラデーション、パディング、サイズ、ソリッド、ストロークのプロパティを指定する。
-
アンドロイドの遅延実行のいくつかの方法
-
[解決済み] Intentsを使用して、あるAndroid Activityから別のAndroid Activityにオブジェクトを送信するにはどうすればよいですか?