在膨胀的布局中更新 TextView

Update TextView in inflated Layout

我有一个名为

的模板布局文件
template_dashboard_item.xml

它的内容是

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/DashboardItemContainer">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/DashboardItem">
    <TextView style="@style/DashboardItemText" android:text="Application for Jane Doe has been added" android:textColor="@color/black" />
    <TextView style="@style/DashboardItemText" android:text="Added today at ..." android:layout_marginTop="10dp" />                 
</LinearLayout>

我正在使用这个模板布局,方法是膨胀它并将它插入到视图中,就像这样

LinearLayout item = (LinearLayout) getLayoutInflater().inflate(R.layout.template_dashboard_item, items, false);
items.addView(item);

就这样,我插入了很多次。

我想知道,在插入它 (addView) 之前,我如何更新那里的 TextViews(文本)?

换句话说,我如何获取 TextView 的对象? (我想 findViewById 在这种情况下不起作用)。

为什么不能在 XML 中为两个文本视图添加 id 并使用 TextView text = item.findViewById(R.id.your_id);

您可以为 TextView 分配一个 ID 并使用 item.findViewById 检索它,或者使用 ViewGroup.getChildAt(int index)

 for (int i = 0 i < item.getChildCount(); i++) {
         View view = item.getChildAt(i);
         if (view instanceof TextView) {

         }
  }

为什么不创建这样的自定义布局

public class CustomView extends RelativeLayout {

    private TextView header;
    private TextView description;



    public Card(Context context) {
        super(context);
        init();
    }

    public Card(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public Card(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        inflate(getContext(), R.layout.view_layout, this);
        this.header = (TextView) findViewById(R.id.header);
        this.description = (TextView) findViewById(R.id.description);
    }


    public void setHeader(String header) {
        this.header.setText(header);
    }


    public void setDescription(String description) {
        this.description.setText(description);
    }

}

并添加布局

LinearLayout items = (LinearLayout) getLayoutInflater().inflate(R.layout.template_dashboard_item, items, false);
CustomView item = new CustomView(this);
item.setHeader("xxx);
item.setDescription("yyy");
items.addView(item);