[英]Android - PagerAdapter not saving RadioButton's state
我有一個非常特殊的問題。 我理解,在前台,Activity的成員變量保持不變(不需要保存以保持)。 現在,我有一個PagerAdapter
代表一個帶有問題和三個答案的測驗。 我已經制作了各種對象來代表問題和答案。
一個Question
總是有一個正好3個Answer
的列表。 我就是這樣做的:(注意:為了便於閱讀,省略了一些代碼)
public class QuizPagerAdapter
{
List<Question> questionList;
Context context;
public QuizPagerAdapter (List<Question> list, Context ctx) {
questionList = list;
context = ctx;
}
@Override
public Object instantiateItem (View pager, int position) {
// Create various views (ScrollView, LinearLayout, etc)
final Question q = questionList.get(position);
RadioGroup group = new RadioGroup(context);
for (int i = 0; i < 3; i++) {
Answer a = q.getAnswer(i);
RadioButton rb = new RadioButton(context);
rb.setId(i);
rb.setText(a.getText());
rb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RadioButton btn = (RadioButton) v;
q.unselectAll(); // unselects all Answer's
q.getAnswer(btn.getId()).setSelected(true);
}
});
if (a.isSelected()) rb.setChecked(true);
}
return view;
}
}
當我在我的Activity中使用它時,我得到了一個很好的問題列表,有三個答案。 現在,當我選擇一個答案時,將檢查RadioButton。 好的,現在,我滾動到下一個問題並檢查一個問題,然后回到上一個問題,我現在檢查的答案現在沒有檢查。
現在,這並不總是會發生,有時候會發生,但有時這足以導致問題。 活動永遠不會放在后台。
我知道Android會破壞PagerAdapter中的Views以節省內存,從而破壞RadioButton,這就是為什么我有這個片段:
if (a.isSelected()) rb.setChecked(true);
但它仍在發生。 我已經嘗試記錄所有內容,調試但我似乎無法找到問題的根源。 也許這里有人遇到過類似的問題。
任何幫助表示贊賞,謝謝!
在OnClick事件中,確保您對Question的引用是正確的對象。 您可能希望通過列表索引引用該問題,因為如果您同時在屏幕上有兩個問題,則q的引用可能是第二個問題,但您已單擊第一個問題答案。
**添加**問題是q是對問題的引用,每次通過instantiateItem函數時,此引用都將從列表中設置為問題的新實例。 因此,當您執行OnClick事件時,值q可能指向不正確的問題實例,而不是您期望的。 您最好通過活動中的視圖索引將問題從原始列表中刪除。
類似於以下內容:
public void onClick(View v) {
RadioButton btn = (RadioButton) v;
Question question = questionList.get(position);
question.unselectAll(); // unselects all Answer's
question.getAnswer(btn.getId()).setSelected(true);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.