Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:GridView和cursorAdapter_Android_Gridview_Adapter_Android Cursoradapter - Fatal编程技术网

Android:GridView和cursorAdapter

Android:GridView和cursorAdapter,android,gridview,adapter,android-cursoradapter,Android,Gridview,Adapter,Android Cursoradapter,您好,我有一个应用程序,它使用GridView使用CursorAdapter从mediastore加载数据。除了GridView之外,它的加载和功能似乎是通过调用适配器中的newView来加载mediastore中的每一项 在logcat中,调用newView后会调用bindView。当我滚动仅调用bindView的网格时,它工作正常 看起来只有当我第一次在gridView上应用适配器时,才会为每个项目调用newView和bindView 这是以前的帖子,但尚未找到任何答案: 您描述的行为是游标

您好,我有一个应用程序,它使用GridView使用CursorAdapter从mediastore加载数据。除了GridView之外,它的加载和功能似乎是通过调用适配器中的newView来加载mediastore中的每一项

在logcat中,调用newView后会调用bindView。当我滚动仅调用bindView的网格时,它工作正常

看起来只有当我第一次在gridView上应用适配器时,才会为每个项目调用newView和bindView

这是以前的帖子,但尚未找到任何答案:
您描述的行为是游标适配器的预期工作方式

CursorAdapter具有内置视图:

  • 如果需要视图对象的新实例,则调用
    newView()
  • 然后调用
    bindwiew()
    bindwiew()
    接收先前由
    newView()
    返回的视图(不一定按相同顺序)。bindView的任务是根据光标中的数据将视图设置为正确的状态
  • 现在,当您四处滚动时,一些视图被推出可见区域,而新视图被拖到可见区域。新视图需要实例化,并根据来自游标的数据设置状态。这可以通过重复步骤1和2来完成

    但是,随着视图回收,被挤出可见区域的视图会被扔进“回收视图池”,CursorAdapter将尝试重新使用这些视图并将其交给
    bindView()
    ,从而跳过步骤1(并节省资源)

    那么,为什么在设置适配器时调用
    newView()

    仅仅因为回收的视图池是空的,还没有视图被滚动出可见区域,因此游标适配器别无选择,只能调用
    newView()
    获取视图的新实例,然后将其传递给
    bindView()

    总而言之:

    • newView()
      :创建视图实例(通常使用布局充气器)
    • bindView()
      :根据光标数据(如文本、图像、按钮等)设置作为参数接收的视图状态

    希望这能消除一些混淆。

    最好使用newView的getview instaed,这是否意味着我没有实现上一篇文章中指定的newView并实现getview。为什么对光标中的每个元素调用bindView,而不仅仅是gridView的可见区域?我有140张图片,bindView和newView一样被调用了140次。这是否意味着我不应该使用此适配器。我刚刚检查了你的另一个线程,你没有设置ImageView的高度和宽度,这取决于你的GridView设置,它会将所有140个项目填充到GridView中,因为它可以将所有0x0像素的视图放入可见区域。哦,我必须检查一下。。