0
public class CustomAdapter extends BaseAdapter

我找到了一个扩展 BaseAdapter 的代码

        public View getView(int index, View view, final ViewGroup parent) {

            if (view == null) {
                LayoutInflater inflater = LayoutInflater.from(parent.getContext());
                view = inflater.inflate(R.layout.single_list_item, parent, false);
            }
    }

 TextView textView = (TextView) view.findViewById(R.id.tv_string_data);
        textView.setText(dataModel.getName());

我的问题是什么时候view == null

为什么我们需要代码 if (view == null) {}

谢谢

4

4 回答 4

0

对于 listView 中的第一项,View 将为空。它需要为第一个项目充气。

请随时提出任何进一步的疑问。

于 2013-01-28T04:53:23.797 回答
0

Android 会重新循环 View 对象,以最大限度地减少对象创建和内存使用。传递给您的视图将是空的,在这种情况下,您应该创建它,或者视图将是非空的,这意味着它已被重新循环。再循环视图是您之前创建的视图,但现在可以用于不同的目的。

一个很好的例子是列表视图。一个列表可能有很多元素,比如 100 个。但是屏幕可能只显示列表的 10 个项目。因此,当您滚动屏幕时,屏幕上不再显示的项目的视图可能会传递给您以供重复使用。这是再循环。

于 2013-01-28T04:54:06.367 回答
0

ListView 通常包含比显示的行数更多的数据。如果用户滚动列表,则行及其关联的视图将滚动到可见区域之外。表示行的 Java 对象可以重新用于新可见的行。

如果 Android 确定代表一行的 View 不再可见,它允许 getView() 方法通过 convertView 参数重用它。

性能优化的适配器将新数据分配给 convertView。这避免了扩充 XML 文件和创建新的 Java 对象。

如果没有 View 可供重用,Android 会将 null 传递给 convertView 参数。因此适配器实现需要检查这一点。

于 2013-01-28T05:09:12.837 回答
0

对于列表视图,我们必须为每个项目提供视图,并且我们还必须填充内容。在大多数情况下,相同的视图将在具有不同内容的每个项目中重复。所以在getView方法的第一次我们会检查,如果视图是空的,那么我们应该膨胀一个视图并填充内容并返回。第二次视图不会为空。因此,您可以重用或提供不同的视图。

于 2013-01-28T05:31:13.420 回答