Использование LayoutInflater для создания динамического представления

1

Я создал файл xml, который я хочу повторить несколько раз и заполнить в основном представлении. Я прочитал, что LayoutInflater - это путь, но у меня возникают проблемы с его работой

Первый вопрос. созданный мной элемент xml имеет в нем несколько текстовых полей. Можно ли это сделать или может содержать только один текстовый просмотр?

ScrollView mainlayout = (ScrollView) findViewById(R.id.ScrollView1);    
LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = (View) inflater.inflate(R.layout.sightmarks_item, null);
            TextView textview1 = (TextView) inflater.inflate(R.id.textView1, null);
            EditText editview1 = (EditText) inflater.inflate(R.id.editview1, null);
            EditText editview2= (EditText) inflater.inflate(R.id.editview2, null);

Затем я запускаю цикл for в массиве и устанавливаю текст для каждого из приведенных выше значений, а затем добавляя представление в представление mainlayout

В настоящее время это ошибка при завышенном виде. я делаю это правильно?

благодаря

Теги:

2 ответа

5
Лучший ответ

В вашем коде есть некоторые проблемы. Чтобы получить элемент любого вида, используйте метод findViewById

ScrollView mainlayout = (ScrollView) findViewById(R.id.ScrollView1);    
LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = (View) inflater.inflate(R.layout.main, null);
TextView textview1 = (TextView) view.findViewById(R.id.textview1);
EditText editview1 = (EditText) view.findViewById(R.id.editview1);
EditText editview2= (EditText) view.findViewById(R.id.editview2);
  • 0
    Например, при создании нескольких представлений этот код всегда получает текстовое представление в первом созданном представлении.
0

Я не думаю, что вы делаете это правильно. Первое, что нужно знать, это то, что Scrollview может содержать только один элемент. У вас есть уникальный LinearLayout или TableLayout в вашем Scrollview, чтобы инкапсулировать textViews после?

На твоем месте:

В вашем файле макета XML (я назвал его "yourfile" здесь), используйте иерархию, такую как:

<ScrollView  xmlns:android="http://schemas.android.com/apk/res/android" ... />
    <LinearLayout ...>
        <TextView .../>
        <TextView .../>
        ...
    </LinearLayout>
</ScrollView> 

Затем в вашей деятельности раздуйте прокрутку:

ScrollView mScroll = (ScrollView) getLayoutinflater().inflate(R.layout.yourfile, null)

Затем, чтобы получить TextViews, просмотрите свой ScrollView с помощью getChild(). Например, чтобы присвоить "мой текст" первому текстуру, это должно работать:

( (TextView) ((ViewGroup) mScroll.getChildAt(0)).getChildAt(0)).setText("my text");

Чтобы понять: если вы хотите достичь единственного LinearLayout, который вы делаете

mScroll.getChildAt(0)

Итак, чтобы перейти к первому текстовому представлению (первый ребенок LinearLayout), вы делаете

mScroll.getChildAt(0).getChildAt(0)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню