いくつかのトピックを検索しましたが、問題の解決策が見つかりませんでした。
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パーツです。
問題は、区画への書き出しと区画からの読み込みにあります...
@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番目のものを起動します。それは問題なく動作し、問題なく小包を引き出すことができました。
Intent
クラスで putParcelableArrayListExtra()
メソッドを使用する必要があります。
Bundle
オブジェクトのputParcelableArrayList(<? extends Parcelable>)
を使用しました。 Intentオブジェクトから直接ではありません(違いは本当にわかりません)。しかし、私はこの方法で使用するために使用します:
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かどうかを確認できます。
多分これは誰かを助ける..それ以外の私の問題は、私がwriteとreadValueを使用したことですが、writeInt、readInt、writeString、readStringなどのような型と一致する必要があります
私はこの方法でそれをやっています:
var intent = Intent(this@McqActivity,ResultActivity::class.Java)
intent.putParcelableArrayListExtra("keyResults", ArrayList(resultList))
// resultList is of type mutableListOf<ResultBO>()
startActivity(intent)
そして、class Parcelableを作成します。単にtwo operation
最初に、データクラスの上で@ ParcelizeAnnotation
を使用し、次に以下のようにParcelable
でそれを継承します。
import kotlinx.Android.parcel.Parcelize
import Android.os.Parcelable
@Parcelize // Include Annotion
data class ResultBO(val questionBO: QuestionBO) : Parcelable {
constructor() : this(QuestionBO())
}
そして受信側で
if (intent != null) {
var results = intent.getParcelableArrayListExtra<Parcelable>("keyResults")
}