Android:创建活动时系统调用getView两次

Android:创建活动时系统调用getView两次,android,android-listview,Android,Android Listview,我有一个自定义列表,大约有20个项目,每个项目有三行。 我使用一个日志来跟踪getView方法的调用方式 public View getView(int position, View convertView, ViewGroup parent) { Log.e("getView", "at position " + position); View view = convertView; if (view == null) { LayoutInflate

我有一个自定义列表,大约有20个项目,每个项目有三行。 我使用一个日志来跟踪getView方法的调用方式

public View getView(int position, View convertView, ViewGroup parent) {

    Log.e("getView", "at position " + position);
    View view = convertView;

    if (view == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        view = inflater.inflate(resourceId, parent, false);
    }
            // my code here

}
然后,当列表项加载时,我收到了这个日志

“getView”,“位于位置0”; “getView”,“位于位置1”; “getView”,“位于位置2”; “getView”,“位于位置3”; “getView”,“位于位置0”; “getView”,“位于位置1”; “getView”,“位于位置2”; “getView”,“位于位置3”; “getView”,“位于位置4”; “getView”,“位于位置5”;

有人能告诉我为什么getView方法从0到3调用了两次吗

有人能告诉我为什么getView方法从0到3调用了两次吗


调用
getView
方法两次,因为
ListView
作为其
onMeasure
方法的一部分,调用适配器的
getView
方法来获取行的
视图
,以查看它们有多大。我猜您有三个可见的行,因此
ListView
将为前三个可见的子项调用
getView
方法三次。

我不知道,但对我来说是一样的,我刚刚测试过。我也想知道。请发布您的自定义适配器代码,确切地说,第一个屏幕中的所有项目调用getView两次。这里是日志:@MrStone没有必要再发布日志了,我已经告诉过你原因了。您可以通过查看
ListView
的源代码或使用简单的重写
ListView
来测试这一点,以查看前三个调用是从
onMeasure
方法进行的。使用此
ListView
()而不是普通的,并检查日志