我试图通过意图传递对象的ArrayList,但无法使其工作。这是我所拥有的:
public class QuestionView extends Activity { //variables and other methods... public void endQuiz() { Intent intent = new Intent(QuestionView.this, Results.class); intent.putExtra("correctAnswers", correctAnswers); intent.putExtra("wrongAnswers", wrongAnswers); intent.putParcelableArrayListExtra("queries", queries); startActivity(intent); } }
在这里收到意向:
public class Results extends Activity { int cAnswers; int wAnswers; ArrayList<Question> qs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.resultsmain); cAnswers = getIntent().getIntExtra("correctAnswers", -1); wAnswers = getIntent().getIntExtra("wrongAnswers", -1); qs = getIntent().getParcelableArrayListExtra("queries"); //more code... } }
我们已经收到了两个int值,correctAnswer和faultAnswers,我可以使用它们。ArrrayList没有通过。endQuiz()方法中没有错误,但’qs = getIntent()。getParcelableArrayListExtra(“ queries”);’ 抛出错误并说“绑定不匹配”。
任何帮助对此表示赞赏!
问题类别:
public class Question { String a1; String a2; String a3; String a4; int correctAnswer; String query; int selectedAnswer; boolean correctness; public Question() { } public Question(String a1, String a2, String a3, String a4, int correctAnswer, String query, int selectedAnswer, boolean correctness) { this.a1 = a1; this.a2 = a2; this.a3 = a3; this.a4 = a4; this.correctAnswer = correctAnswer; this.query = query; this.selectedAnswer = selectedAnswer; this.correctness = correctness; } }
您必须更改您的Question类才能实际实现Parcelable。起初,Parcelable界面可能会令人困惑……但是挂在那里。
Question
您应该关注两种Parcelable方法:
writeToParcel()
Question(Parcel in)
您可以安全地剪切并粘贴我标记的其他Parcelable信息。
为了简单起见,我将只使用您的Question类的一部分:
public class Question implements Parcelable { String a1; String a2; ... public Question(String a1, String a1) { this.a1 = a1; this.a2 = a2; } // Your existing methods go here. (There is no need for me to re-write them.) // The following methods that are required for using Parcelable private Question(Parcel in) { // This order must match the order in writeToParcel() a1 = in.readString(); a2 = in.readString(); // Continue doing this for the rest of your member data } public void writeToParcel(Parcel out, int flags) { // Again this order must match the Question(Parcel) constructor out.writeString(a1); out.writeString(a2); // Again continue doing this for the rest of your member data } // Just cut and paste this for now public int describeContents() { return 0; } // Just cut and paste this for now public static final Parcelable.Creator<Question> CREATOR = new Parcelable.Creator<Question>() { public Question createFromParcel(Parcel in) { return new Question(in); } public Question[] newArray(int size) { return new Question[size]; } }; }
现在,更改您queries在Intent Extras中的投入方式。
queries
intent.putParcelableArrayListExtra("queries", queries);
读取Parcelable数组的方式非常完美。