首页 > 解决方案 > 如何在线性布局中访问膨胀视图

问题描述

我使用布局充气器,用一些按钮和一些文本视图来充气线性布局。如何访问膨胀布局中的小部件?

例如:我有一个按钮,我想为它设置 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>

谢谢你的帮助。

标签: javaandroidandroid-inflate

解决方案


它应该工作。这里没有什么特别的。

   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();
            }
        });
    }

推荐阅读