使用布局充气器创建自定义菜单,如何引用每个组件?

Creating a custom menu using a layout inflator, how do I reference each component?

这是我要充气的物品:

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

假设我将以下项目膨胀三次,以创建三个菜单项 - 我将如何单独引用每个项目?

例如,如果我想更改菜单第一项中帐户名称的文本,我将如何引用它位于菜单的第一项,而不是第二项或第三项?

Say if I inflated the following item three times, to create three menu items - how would I reference each item individually?

使用 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 中查看 ID:

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

或使用getChildAt方法:

TextView textView=(TextView)firstView.getChildAt(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 ");

如果您的布局在 activity xml 内,您应该像这样访问文本视图:

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

 textview.setText("sadsasa ");