Динамически добавить контент пользовательского интерфейса в Android
-
28-10-2019 - |
Вопрос
У меня есть приложение для 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
Для списка, поэтому вы можете отобразить все три представления (флажок, изображение и текст) в качестве одного элемента, но есть много примеров, которые доступны в сети, а также здесь.