在膨胀的布局中更新 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);
我有一个名为
的模板布局文件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);