Динамически добавлять контент пользовательского интерфейса в Android - PullRequest
3 голосов
/ 20 февраля 2012

У меня есть приложение для Android, которое задает вопрос, за которым следует x количество вариантов.Каждая опция содержит textview, ImageView и radio button.

Значение x (т. Е. Количество опций) не является постоянным.Я хочу динамически добавлять содержимое пользовательского интерфейса, чтобы удовлетворить это требование.

На данный момент я написал код в xml макета для отображения максимум 4 опций.Если число опций равно 2, я скрываю опции 3 и 4, используя что-то вроде

tvoption1.setVisibility(View.GONE);
tvoption2.setVisibility(View.GONE);

Однако это не очень масштабируемо.Может кто-нибудь сказать мне, как динамически добавлять параметры для Java.Или есть лучший подход?

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012

A View может быть добавлено во время выполнения с использованием инфлятора:

LinearLayout linearLayout = (LinearLayout)inflater.inflate(R.layout.news_categories_item, null);

TextView categoryValueTextView = (TextView)linearLayout.findViewById(R.id.news_category_item_value);

mMainLinearLayout.addView(categoryValueTextView);

В этом примере, LinearLayout, содержащий TextView, надувается.Затем получается ссылка на составляющий TextView, и TextView динамически добавляется (во время выполнения) к основному линейному макету (mMainLinearLayout).

Объект Inflater может быть получен в Activity с использованием getLayoutInflater().

1 голос
/ 20 февраля 2012

создайте свой макет строки отдельно от основного xml

Получить сервис LayoutInflater из контекста:

LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATE_SERVICE);

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

for(int i=0;i<list.size();i++)
{
     LinearLayout llView=(LinearLayout)inflater.inflate(R.layout.row);
     //get view id and set values
     TextView txt=(TextView)llView.findViewById(R.id.text);
}
0 голосов
/ 20 февраля 2012

A ListView - хороший вид для отображения нескольких похожих предметов. Здесь - учебное пособие (другие виды с адаптерами тоже хороши, например GridView или Gallery).
Возможно, вы захотите создать свой собственный adapter для списка, так что выможет отображать все три представления (флажок, изображение и текст) как один элемент, но есть множество примеров, доступных как в сети, так и здесь, в SO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...