매우 특이한 문제가 있습니다. 포어 그라운드에서 액티비티의 멤버 변수는 변경되지 않은 채로 유지됩니다 (저장하지 않아도 지속됨). 자, 질문과 3 개의 답이있는 퀴즈를 나타내는 PagerAdapter
이 있습니다. 질문과 답변을 표현하기 위해 다양한 객체를 만들었습니다.Android - PagerAdapter가 RadioButton의 상태를 저장하지 않음
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;
}
}
내 활동이를 사용
, 나는 세 가지 질문에 대한 답변의 좋은 목록을 가져옵니다. 이제 하나의 응답을 선택하면 RadioButton이 선택됩니다. 좋아, 이제 다음 질문으로 스크롤하여 그 질문을 확인한 다음 이전 질문으로 돌아가서 처음에 확인한 대답이 이 아니며이 확인되었습니다.이제 항상 그런 것은 아니지만 때로는 발생하지만 때로는 문제가 발생할 수 있습니다. 활동이 배경에 배치되지 않습니다.
if (a.isSelected()) rb.setChecked(true);
그러나 여전히 일어나고있다 :
내가 안드로이드 따라서의 RadioButton을 파괴, 메모리를 절약하기 위해 PagerAdapter에서보기를 파괴 할 것이라는 점을 이해하고, 이것이 내가이 조각이있는 이유도 바로이 때문입니다. 모든 것을 로깅 해보았지만 디버깅은했지만 문제의 근원을 알 수는 없습니다. 어쩌면 여기 누군가가 비슷한 문제를 겪었을 것입니다.
도움을 주시면 감사하겠습니다. 미리 감사드립니다.
OnClick 이벤트 내부의 질문 마지막 질문과 동일 Q = ...; 처음에는. 나는 그것을 명확하게하기 위해 그것을 지금 바꿨다. 여전히 문제가 될 수 있을까요? – vanneto