在膨胀的布局中更新TextView

时间:2015-06-04 18:17:44

标签: android textview layout-inflater

我有一个名为

的模板布局文件
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不起作用。)

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以为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) {

         }
  }

答案 2 :(得分:1)

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

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