Из названия может быть немного неясно, что я хочу спросить, поэтому позвольте мне объяснить.
В моем проекте мне нужно сделать динамический просмотр в цикле while. Вот так;
private void loadCheckPointQuantity() {
final LinearLayout rgLayoutContainer = (LinearLayout)findViewById(R.id.quantityAnswers);
_answerCursor.moveToFirst();
while(_answerCursor.isAfterLast() == false) {
LinearLayout rgContainer = new LinearLayout(this);
rgContainer.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
rgContainer.setOrientation(LinearLayout.HORIZONTAL);
final ImageView checked = new ImageView(this);
checked.setMinimumHeight(30);
checked.setMinimumWidth(30);
if(_answerCursor.getInt(CPA_IS_CHECKED_COL) == 1) {
checked.setBackgroundResource(R.drawable.btn_check_buttonless_on);
} else {
checked.setBackgroundResource(R.drawable.ic_delete);
}
checked.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
TextView txtAmount = new TextView(this);
txtAmount.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
txtAmount.setText((_answerCursor.getPosition() + 1) + "/" + _answerCursor.getCount());
txtAmount.setTextSize(22);
RadioGroup rgAnswer = new RadioGroup(this);
rgAnswer.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
rgAnswer.setOrientation(RadioGroup.HORIZONTAL);
rgAnswer.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId) {
case 0:
checked.setBackgroundResource(R.drawable.ic_delete);
break;
case 1:
checked.setBackgroundResource(R.drawable.btn_check_buttonless_on);
break;
}
}
});
RadioButton rbYes = new RadioButton(this);
rbYes.setText(R.string.yes);
rbYes.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
rbYes.setId(1);
RadioButton rbNo = new RadioButton(this);
rbNo.setText(R.string.no);
rbNo.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
rbNo.setId(0);
ImageButton camButton = new ImageButton(this);
camButton.setImageResource(R.drawable.ic_menu_camera);
camButton.setLayoutParams(new LayoutParams(70, 70));
final EditText txtNote = new EditText(this);
txtNote.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
txtNote.setEnabled(false);
txtNote.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(!hasFocus) {
txtNote.setSingleLine(true);
} else {
txtNote.setSingleLine(false);
}
}
});
rgAnswer.addView(rbYes);
rgAnswer.addView(rbNo);
rgContainer.addView(checked);
rgContainer.addView(txtAmount);
rgContainer.addView(rgAnswer);
rgContainer.addView(camButton);
rgContainer.addView(txtNote);
rgLayoutContainer.addView(rgContainer);
if(_answerCursor.getInt(CPA_ANSWER_COL) == 1) {
rbYes.setChecked(true);
} else if(_answerCursor.getInt(CPA_ANSWER_COL) == 0) {
rbNo.setChecked(true);
}
if(_answerCursor.getInt(CPA_ANSWER_COL) == 0 || _answerCursor.getInt(CPA_ANSWER_COL) == 1) {
txtNote.setEnabled(true);
}
_answerCursor.moveToNext();
}
_answerCursor.moveToFirst();
}
Что происходит, в базе данных есть поле, которое определяет, сколько раз цикл должен быть пересечен. Количество Таким образом, если количество составляет 5. Компоненты должны быть сделаны 5 раз.
Проблема в том,
Поскольку я делаю все это в методе, я не могу получить доступ к отдельным представлениям.
Например, и это то, что должно произойти и в реальности;
Я нажимаю кнопку. Затем мне нужно сохранить все результаты в базе данных.
То есть для результатов радиогруппы EditText и isChecked.
Проблема в том, что я не знаю, как получить доступ к каждому отдельному представлению.
Я думал о нескольких вещах, чтобы решить это. Но все они в конечном итоге создают вопросительные знаки над моей головой
Я пытался создать класс для представления ответа (isChecked, note и т. Д. (С использованием методов получения и установки)
создайте список массивов, поместите их в массив.
это должно работать. Выкладываю ответы в arraylist. Но это оставляет меня со следующей проблемой. Что я текст изменения? Как я могу справиться с этим?
если я использую observables, должен ли я сделать класс ответов наблюдаемым, должен ли я вызывать setChanges () для каждого члена и реализовывать наблюдаемый в классе, содержащем loadCheckPointQuantity?
У меня ровно 0,4 опыта с наблюдаемыми.
Как мне сохранить последние данные при нажатии следующей кнопки?
Я абсолютно невежественен ...
Так как это может быть расплывчато:
Чего я хочу достичь: сохранить последние данные из всех представлений в базе данных
как: нужна помощь
когда: при нажатии кнопки
Время, которое вы потратили, чтобы понять / посмотреть / прочитать этот пост, высоко ценится. Ответы еще выше.
Если вам нужно больше кода или объяснения. Дайте мне знать, и я сделаю все возможное.