android - 膨胀 View 返回旧的膨胀结果

标签 android

我尝试多次膨胀布局以插入到另一个布局中。这是代码:

    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/

相关文章:

java - 列表上的空对象引用

php - 使用Json编码的php和java android之间的特殊字符

java - MotionEvent.ACTION_UP 未被调用

android - Google 反向地理编码并不总是返回 street_address

java - 处理聊天输入或停止输入事件 (Android)

android - 从 MediaPlayer 原始元素获取字符串值

java - Simpleframework 树反序列化时出现 java.lang.StackOverflowError

android - 如何使用按钮从 Fragment 重定向到 URL

java - 我需要为Android Studio 4.0.1下载哪个版本的Gradle版本

android - 使用 RxJava2 PublishSubject 管理 null bool 值