我尝试多次膨胀布局以插入另一个布局。这是代码:
View oldView = null;
for (ProfileServiceCategory.ProfileService service : profileServiceCategory.getServices()) {
View view = LayoutInflater.from(context)
.inflate(R.layout.profile_service_list_item, viewHolder.rootView);
if(oldView == view) {
Log.d("test", "Error");
}
oldView = view;
TextView serviceName = (TextView) view.findViewById(R.id.profile_services_name);
serviceName.setText(service.getServiceValue());
}
我面临的问题是inflate方法返回的视图变量始终是第一个膨胀的视图。为了清楚起见,我添加了一个Log.d,如果一切按预期工作,它应该从未被调用,但它确实已经命中。
我检查了视图层次结构,我可以确定新的视图实际上已添加到rootView中,但我得到的参考是旧视图。
答案 0 :(得分:1)
我的一位同事建议通过手动将视图添加到容器来解决此问题。这是编辑过的代码:
LayoutInflater layoutInflater= LayoutInflater.from(context);
for (ProfileServiceCategory.ProfileService service : profileServiceCategory.getServices()) {
View view = layoutInflater.inflate(R.layout.profile_service_list_item, null);
TextView serviceName = (TextView) view.findViewById(R.id.profile_services_name);
serviceName.setText(service.getServiceValue());
viewHolder.rootView.addView(view);
}
当null作为第二个参数传递给inflate方法时,每次都会返回一个新视图。可以通过addView方法将视图插入容器内。
这显然是android SDK中的一个错误。
答案 1 :(得分:-1)
LayoutInflater.from(context).inflate(R.layout.profile_service_list_item,
viewHolder.rootView);
始终返回相同的inflater服务。所以我认为你必须使用cloneInContext
View view = LayoutInflater.from(this)
.cloneInContext(R.layout.layout_fullscreen_image, viewHolder.rootView);