ListView适配器getView()获取错误的项目

bae*_*aek 0 android android-listview

我有一个ListView,我输入以下代码来查看我的BaseAdapter的getView()过程.

@Override

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

    Log.d("getView()","Fetching Row: " + position);
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我慢慢向下滚动列表时,我注意到发生了一些奇怪的事情.即使我在列表位置40-50ish,它仍然调用getView()的位置为0-7.这是我的日志的样子:

05-14 11:46:13.989: I/getView()(18681): Fetching Row: 45
05-14 11:46:14.039: I/getView()(18681): Fetching Row: 0
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 1
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 2
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 3
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 4
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 5
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 6
05-14 11:46:14.069: I/getView()(18681): Fetching Row: 7
05-14 11:46:14.320: I/getView()(18681): Fetching Row: 46
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 0
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 1
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 2
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 3
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 4
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 5
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 6
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 7
Run Code Online (Sandbox Code Playgroud)

如您所见,在第45行和第46行之间,每次都为第0-7行调用getView().每个列表项都会发生这种情况.我担心这会导致性能问题.

为什么会这样?这是正常行为吗?

Hoa*_*yen 5

在listview xml中,将layout_height更改为 android:layout_height="match_parent"

  • 由于wrap_content,每次都会重新计算布局. (3认同)