У меня есть список вопросов, и для каждого элемента есть флажок да и нет. Это создается с использованием абстрактного класса (потому что есть много списков), дочернего класса и адаптера массива. Вот абстрактный код класса создания списка:Android - notifyDataSetChanged не работает с пользовательским представлением
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
List<Question> questions = getQuestions(1L);
setContentView(R.layout.activity_questions);
items = (ListView) findViewById(R.id.items);
adapter = new QuestionsAdapter(this, getCurrentContext(), questions, 1L, getDbData());
items.setAdapter(adapter);
}
Вот это QuestionsAdapter:
public View getView(int position, final View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.row_questions, parent, false);
holder = new QuestionHolder();
holder.question = (TextView) row.findViewById(R.id.question);
holder.yes = (CheckBox) row.findViewById(R.id.yes);
holder.no = (CheckBox) row.findViewById(R.id.no);
row.setTag(holder);
} else {
holder = (QuestionHolder) row.getTag();
}
Question question = questions.get(position);
holder.question.setText(question.getQuestion());
setStateCheckboxes(holder, question);
holder.yes.setTag(getItem(position));
holder.no.setTag(getItem(position));
holder.yes.setOnCheckedChangeListener(listen);
holder.no.setOnCheckedChangeListener(listen);
return row;
}
Я должен создать держатель, чтобы быть в состоянии иметь ListView с флажками. До этого момента все работает нормально.
У меня тогда есть представление для каждого элемента в списке. Это очень просто:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbData = new DbData(this);
this.setContentView(R.layout.single_question);
CheckBox yes = (CheckBox) findViewById(R.id.yes_single);
CheckBox no = (CheckBox) findViewById(R.id.no_single);
}
В этом представлении я могу изменить статус флажков. Это изменение отражается в db, но когда я возвращаюсь в основной список, это отражается только на обновлении. Я переопределены в onRestart():
@Override
protected void onRestart() {
// Change this
questions = getQuestions(1L);
adapter.notifyDataSetChanged();
super.onRestart();
}
Адаптер вытягивать данные из вопросов ArrayList, поэтому я repolling его и уведомляющее адаптер, что данные изменились, но это не меняет мое мнение. Если я обновляю представление, то текущее состояние всего обновляется. Я знаю, что это длинный вопрос, но любая помощь будет оценена по достоинству.