Как получить доступ к завышенным представлениям в линейном макете - PullRequest
0 голосов
/ 30 апреля 2018

Я использую разметку разметки, чтобы раздувать линейную разметку с помощью некоторых кнопок и некоторых видов текста. Как я могу получить доступ к виджетам в раздутом макете?

Например : у меня есть кнопка, и я хочу установить для нее прослушиватель onclick. Обычно вы объявляете кнопку с помощью 'findViewById', а затем устанавливаете прослушиватель. Но раздутые кнопки отсутствуют в xml активности (линейный макет находится в другом xml, а не xml активности), чтобы найти их представление с помощью 'findViewById'.

Код моего инфлятора:

 LinearLayout item = (LinearLayout )findViewById(R.id.linear_layout_duel_basic_easy);
            View child_1 = getLayoutInflater().inflate(R.layout.linear_layout_duel_1, null);
            item.addView(child_1);

Макет, который я хочу добавить:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:orientation="horizontal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button" />
</LinearLayout>

Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

По комментарию:

В упражнении xml у меня есть вертикальная линейная схема (создана для представление прокрутки) и в XML, который я использую, чтобы надуть есть горизонтальный линейный макет, где кнопка и текстовое представление

Вот как вы можете этого достичь.

LinearLayout item = (LinearLayout)findViewById(R.id.linear_layout_duel_basic_easy); // Your vertical linearLayout
View child_1 = getLayoutInflater().inflate(R.layout.linear_layout_duel_1, null);// Your Horizontal LinearLayout
item.addView(child_1);

Чтобы получить доступ к виду внутри горизонтальной линии LinearLayout: -

TextView tv = child_1.findViewById(R.id.textView);
Button btn = child_1.findViewById(R.id.button);
0 голосов
/ 30 апреля 2018

должно работать. Здесь нет ничего особенного.

   LinearLayout item = findViewById(R.id.linear_layout_duel_basic_easy);
    for (int i = 0 ; i < 10; i++) {
        View child = getLayoutInflater().inflate(R.layout.linear_layout_duel_1, null);
        item.addView(child);
        final int finalI = i;
        child.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "clicked = " + finalI, Toast.LENGTH_LONG).show();
            }
        });
    }
0 голосов
/ 30 апреля 2018

Вы пробовали переопределить onFinishInflate()?

Внутри вы можете найти раздутую кнопку, вы можете просто перебрать всех своих детей, чтобы найти нужный вам вид.

//iterate children
for (int index = 0; index < getChildCount(); index+=1){
            getChildAt(index);
//check if that view is what you need
        }
...