Динамически добавить контент пользовательского интерфейса в Android

StackOverflow https://stackoverflow.com/questions/9361744

Вопрос

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

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

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

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

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

Это было полезно?

Решение

А 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);

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

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

Другие советы

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

Получите службу LayoutInflater из контекста:

LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATE_SERVICE);

Используйте следующий метод для AddView для основного 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);
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top