Android сохранение значений динамического просмотра - PullRequest
1 голос
/ 26 октября 2011

Из названия может быть немного неясно, что я хочу спросить, поэтому позвольте мне объяснить.

В моем проекте мне нужно сделать динамический просмотр в цикле 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 опыта с наблюдаемыми.

Как мне сохранить последние данные при нажатии следующей кнопки?

Я абсолютно невежественен ...

Так как это может быть расплывчато:

Чего я хочу достичь: сохранить последние данные из всех представлений в базе данных как: нужна помощь когда: при нажатии кнопки

Время, которое вы потратили, чтобы понять / посмотреть / прочитать этот пост, высоко ценится. Ответы еще выше.

Если вам нужно больше кода или объяснения. Дайте мне знать, и я сделаю все возможное.

1 Ответ

0 голосов
/ 26 октября 2011

Я решил свою проблему.

Я назначил списки событий всем вещам, которые должны в конечном итоге оказаться в базе данных. При смене фокуса я сохраняю данные в базе данных. Поэтому я не держу никаких списков с ответами. Я обновляю базу данных на лету. К сожалению, это плохо для производительности. К счастью, мы можем позволить себе это представление.

Я пытался запустить этот код, сообщая циклу while, чтобы выполнить его 3000 раз. За исключением генерации представления, занимающей некоторое время (в среднем около 3-4 секунд), все работало нормально. Поэтому мне не нужно отслеживать сгенерированные объекты вне метода. Android / Java делает это для меня.

...