扩展BaseAdapter,视图何时变为空?

时间:2013-01-28 04:47:18

标签: android android-layout

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 个答案:

答案 0 :(得分:0)

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

请随意提出任何疑问。

答案 1 :(得分:0)

Android重新循环View对象以最小化对象创建和内存使用。传递给您的视图将为null,在这种情况下您需要创建它,或者视图将为非null,这意味着它已被重新循环。重新循环的视图是您之前可能创建的视图,但现在可用于其他目的。

这方面的一个很好的例子是listview。列表可以包含许多元素,例如100.然而,屏幕可能只显示列表中的10个项目。因此,当您滚动屏幕时,屏幕上不再显示项目的视图可能会传递给您重复使用。这是重新循环。

答案 2 :(得分:0)

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

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

性能优化适配器将新数据分配给convertView。这样可以避免膨胀XML文件并创建新的Java对象。

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

答案 3 :(得分:0)

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