【问题标题】:Adapter's getView() asks for position 0 twice before each postion. Why?适配器 getView() 在每个位置之前两次要求位置 0。为什么?
【发布时间】:2015-03-16 21:09:25
【问题描述】:

我阅读了有关 getView() 的所有其他帖子,但没有找到任何解决方案。我有一个带有 SimpleCursorAdapter 的 GridView。我登录(位置);在 getView() 中,我看到了这样的模式:

0,0,1,0,0,2,0,0,3,0,0,4,0,0,5 等。这意味着我必须构建 3 个视图,因为它会为每个新视图滚动视图显示,它的波涛汹涌和滞后。为什么这样做?我没有任何明显的东西,比如将我的 gridview 设置为 wrap-content 或其他任何奇怪的东西。我的代码没有什么奇怪的。可能是一个因素是每个项目视图可能具有不同的高度,具体取决于我正在显示的文本的长度。

我目前正在调试 4.2.2 Galaxy Nexus。

【问题讨论】:

  • 您是否在 getView() 中使用了任何 AsynchTask?
  • 请发布您的代码。
  • 有点相同的问题here 和其他任何地方。 Android的适配器的getView()方法一直很乱。
  • 我想详细说明,即使在根本看不到位置 0(例如向下滚动网格时),也会调用位置 0 上的 getView()。我猜这是因为 Android 想要测量网格。

标签: android android-listview


【解决方案1】:

在 gridview 测量/布局通道中请求索引 0。

该问题没有详细信息,但以下内容可以解释您所看到的模式:

  • GridView 位于需要两次测量/布局通道的布局中(例如,LinearLayout 带有权重,RelativeLayout 带有布局依赖规则)。这解释了两个位置 0。

  • 每个getView() 都会导致父级重新布局。这就解释了每个位置后面的位置 0。

【讨论】:

  • 我看到了同样的事情。我将布局更改为 match_parent 但没有成功。
【解决方案2】:

确保列表视图的高度不是 wrap_content

并使其成为 fill_parent 。

希望对您有所帮助。

【讨论】:

    【解决方案3】:

    正如我在问题的 cmets 中所写,我注意到在位置 0 上调用了 getView(),即使根本看不到该位置。我认为原因是需要通过网格来衡量项目。

    这种情况发生了一点我并没有那么困扰,但是当它做了很多并且向下滚动网格时,它让我感到困扰,使网格变得长腿。尤其是当它重新绘制甚至看不见的元素时。

    我解决它的方法是,当请求 getView(0) 并且不应该看到项目 0 时,这意味着测量已经完成,我返回一个已经绘制的实际视图(重用转换后的视图),避免重新绘制位置0.

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Workaround Android requesting position 0 even though it doesn't draw it.
        AbsListView listView = (AbsListView) parent;
        int firstVisiblePosition = listView.getFirstVisiblePosition();
        if (position == 0 && firstVisiblePosition > 10) {
            if (convertView == null) {
                convertView = actualPaint(position, convertView, parent);
            }
            return convertView;
        }
        convertView = actualPaint(position, convertView, parent);
        return convertView;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多