【问题标题】:getLastVisiblePosition returning -1getLastVisiblePosition 返回 -1
【发布时间】:2011-05-01 12:04:15
【问题描述】:

我的ListView 有问题(使用CursorAdapter)。当我打电话给getListView().getLastVisiblePosition() 时,我收到了-1。这是一个问题,因为我的列表中填充了项目。此外,getListView().getFirstVisiblePosition() 始终返回 0,无论我在列表中的哪个位置滚动。有什么想法吗?

跟startManagingCursor有关

    @Override
    public void changeCursor(Cursor cursor) {
        super.changeCursor(cursor);
        MyActivity.this.mCursor = cursor;
        //startManagingCursor(MyActivity.this.mCursor);
    }

如果我注释掉 startManagingCursor,一切正常。我也尝试在更改Cursor 之前添加stopManagingCursor(),但仍然遇到同样的问题。

【问题讨论】:

  • 谁能提供更多的想法?我真的很喜欢使用 startManagingCursor
  • 调用.getLastVisiblePosition()时列表视图是否已经填充?

标签: android listview android-cursor


【解决方案1】:

即使我也面临同样的问题。问题是, getLastVisiblePosition() 仅在您位于列表视图的第一个元素中时才有效,其余部分您将返回 null。所以我所做的是,我做了一个小计算来找出我在下面提到的确切视图位置,

int  LastPos=(mylist.getLastVisiblePosition()-mylist.getFirstVisiblePosition());

这毫无疑问会返回确切的最后位置。

【讨论】:

    【解决方案2】:

    这是因为在您调用 getListView().getLastVisiblePosition() 的那一刻,列表视图不会呈现。您可以像这样将调用添加到视图的消息队列中:

    listview.post(new Runnable() {
        public void run() {
            listview.getLastVisiblePosition();
        }
    });
    

    【讨论】:

      【解决方案3】:

      我的猜测是您的 getItem(int position)getItemId(int position) 方法在您的适配器中没有正确定义。

      【讨论】:

      • 它们根本没有定义。他们从来没有。在我开始使用 startManagingCursor 之前,这一切都很好(因为我收到“正在完成一个尚未停用或关闭的游标”错误)。我也看不出这两种方法会如何影响这一点。我在向 Android 询问第一个和最后一个可见位置;不是为了数据。
      • 是的,我确信 getLastPosition() 使用这两种方法来确定该信息
      • 为什么会这样?另外,既然我没有覆盖这些方法,为什么当我不启动管理光标时一切都会正常工作,但一旦我这样做就会失败?在这两种情况下,我都没有覆盖这些方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2015-03-04
      • 2013-10-27
      • 2016-07-28
      • 2014-09-26
      • 2012-04-04
      相关资源
      最近更新 更多