我尝试多次膨胀布局以插入到另一个布局中。这是代码:
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 方法返回的 View 变量始终是第一个膨胀 View 。明确地说,我添加了一个 Log.d ,如果一切都按预期工作,它应该永远不会被调用,但它确实命中了。
我检查了 View 层次结构,我可以确认新 View 实际上已经添加到 rootView,但我得到的引用是针对旧 View 的。
最佳答案
我的一位同事提出了一种解决方法,即手动将 View 添加到容器中。这是编辑后的代码:
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 方法时,每次都会返回一个新 View 。可以通过 addView 方法将 View 插入到容器中。
这显然是android SDK中的一个bug。
关于android - 膨胀 View 返回旧的膨胀结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30083173/