2012-02-20 4 views
3

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

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

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

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

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

ответ

2

A View могут быть добавлены во время выполнения с помощью Inflater как это:

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).

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

0

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

1

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

Get 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); 
} 
Смежные вопросы