2013-06-25 4 views
0

У меня в таблице есть таблица SQLite, в которой есть набор вопросов. Активность, в которой пользователь может выполнить этот тест, сначала загружает первый вопрос, затем каждый раз, когда они нажимают дальше, он задает текст вопроса и ответов textView следующей строке таблицы SQLite.Загрузка нескольких макетов динамически в течение одного действия на android

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

Можно ли прокручивать и создавать макеты каждый раз или будет убивать память?

ответ

1

Вы не хотите делать это по нескольким причинам. Редко бывает неплохо иметь несколько layouts для одного Activity. Я не знаю, как выглядит ваш layout, но вы можете динамически загружать parent and child views, что, вероятно, вы хотите сделать, если вы не знаете количество вопросов каждый раз.

Вы можете создать View что-то вроде

TextView question = new TextView(this); 

затем добавить его к layout с addView()

Вы можете, скажем, LinearLayout в отдельном файле и inflate, что каждый раз, когда вам нужен новый вопрос и установите в нем Views.

Другой вариант, если вы знаете, сколько Views должно быть в вашем layout будет создавать их в XML и использовать visibility свойство android:visibility="invisible" в XML, то изменить его visible в Java, когда они нажимают на Button

textView.setVisibility(View.VISIBLE); 

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

Еще один вариант, который вы можете рассмотреть, если у вас есть большой layout s для каждого вопроса/ответа или хотите, чтобы они были повторно использованы, чтобы создать отдельные файлы для каждого и использовать тег <include>, чтобы включить их в свой основной файл layout. Вы также можете использовать свойство visibility, которое делает это таким образом и имеет отдельные файлы. Вы просто хотите попытаться избежать вызова setContentView() несколько раз, потому что это установит все ваши Views значениям по умолчанию и может стать беспорядочным, что вызовет еще больше проблем.

0

Вместо того, чтобы загружать все макеты спереди, вы также должны хранить ответы в sqlite и устанавливать значения, когда этот экран загружается снова. Таким образом, поток будет идти:

OnCreate -> установить содержание вид

onResume -> проверить, если ответ существует проблема с SQLite запроса. Если существует ответ, установите значение.

OnPause -> если ответ установлен, магазин SQLITE

На самом деле, вы, вероятно, хотите сохранить при нажатии следующей кнопки .. Это в свою очередь, вызов OnPause, хотя, если вы затем открыть новый вид деятельности ,