2016-07-12 1 views
1

Это деталь я накачивания:Создание пользовательского меню с использованием макета инфлятора, как я могу ссылаться на каждый компонент?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="100dp" 
    android:background="@drawable/background_border" 
    android:padding="10dp" 
    > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Account name" 
     android:textSize="25sp"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Balance: £61.43" 
     android:textSize="25sp" 
     android:paddingTop="40dp"/> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_keyboard_arrow_right_black_24dp" 
     android:layout_alignParentEnd="true" 
     android:layout_centerInParent="true"/> 

</RelativeLayout> 

И я надувать его, используя следующий код:

LinearLayout parent = (LinearLayout) findViewById(R.id.linearL); 

view = getLayoutInflater().inflate(R.layout.menu_item, parent,false); 
parent.addView(view); 

Скажем, если я надувается следующий пункт в три раза, чтобы создать три меню items - как я могу ссылаться на каждый элемент отдельно?

Например, если бы я хотел изменить текст имени учетной записи в первом элементе меню, как бы я мог ссылаться на то, что он находится в первом элементе меню, а не во втором или третьем?

+0

linearL является расположение от xml-файл? – aurelianr

+0

@aurelianr Линейный макет - это основной вид деятельности, в который я раздуваю элемент меню. –

ответ

3

Скажите, если бы я надул следующий пункт три раза, чтобы создать три меню элементов - как бы я ссылался на каждый элемент отдельно?

Использование parent.getChildCount() и parent.getChildAt() для доступа Просмотров из любого R.layout.menu_item макета как:

Добавить макет несколько раз:

//First time 
parent.addView(view); 
//Second time 
parent.addView(view); 

Получить первый добавило R.layout.menu_item макет:

View firstView=parent.getChildAt(0); 

В Точно так же получить другого ребенка Вид parent макет.

доступ ребенка Мнения firstView помощью:

Просмотр идентификатора при добавлении в XML:

TextView textView=(TextView)firstView.findViewById(R.id.textViewID); 

или с использованием метода getChildAt:

TextView textView=(TextView)firstView.getChildAt(0); 

доступа других видов в то же путь.

+0

Удивительный, спасибо, что я только что нашел :) –

0
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="100dp" 
    android:background="@drawable/background_border" 
    android:padding="10dp" 
    > 

    <TextView 
     android:id="@+id/account_name_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Account name" 
     android:textSize="25sp"/> 

    <TextView 
     android:id="@+id/balance_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Balance: £61.43" 
     android:textSize="25sp" 
     android:paddingTop="40dp"/> 

    <ImageView 

     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_keyboard_arrow_right_black_24dp" 
     android:layout_alignParentEnd="true" 
     android:layout_centerInParent="true"/> 

</RelativeLayout> 

А в коде вы будете иметь некоторые вещи, как

TextView textview = (TextView)relativeLayoutFromXml.findById(R.id.balance_text_view); 

textview.setText("sadsasa "); 

Если ваш макет в деятельность XML, вы должны получить доступ к TextView так:

TextView textview = (TextView) findViewById(R.id.balance_text_view); 

textview.setText("sadsasa "); 
+1

Не совсем то, что я искал - Возможно, я был неясен. Спасибо в любом случае :) –

+0

добро пожаловать. – aurelianr

Смежные вопросы