【问题标题】:Android - Scrolling through ListView leads to Out of Bounds ExceptionAndroid - 滚动 ListView 导致超出范围异常
【发布时间】:2011-07-28 22:08:41
【问题描述】:

我正在开发一个主要由列表视图组成的应用程序。它由我自己的自定义数组适配器支持,其大小每 5 秒更改一次。如果随着数组适配器从较大的大小更改为较小的大小时滚动列表视图,则会出现越界异常。为什么会发生这种情况对我来说是有道理的(因为我正在滚动超出新数组大小的位置),但我想知道是否有调试它的好方法。我似乎无法得出一个明确的结论,我想知道是否可以得到一些帮助。

我使用以下 asyncTask 更新适配器...

public class myTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... params) {
            while(isRunning){
                myData.clear();
                getData();
                publishProgress();
                SystemClock.sleep(5000);
            }
            return null;
        }

        protected void onProgressUpdate(Void...progress){
            listAdapter.notifyDataSetChanged();

        }     
}

myData 是支持listAdapter 的ArrayList,getData() 是使用最终将显示在我的列表视图中的相关信息填充myData 的函数。

有没有解决这个问题的好方法?

问候

【问题讨论】:

  • 你有 onScroll 监听器吗?
  • 为什么滚动到数组没有的位置?适配器应该只返回你拥有的元素,对吧?
  • @Nikola,我没有 onScroll 监听器,我只是想我需要实现它以防止异常。 dmon,这就是我的问题,呵呵。如果适配器从较大的尺寸变为较小的尺寸,我正在滚动的位置大于较小的尺寸,那就是我得到超出范围的异常。
  • Hmmm.... 项目的位置始终是 - 第一个可见位置..

标签: android listview android-arrayadapter


【解决方案1】:

您使用的是自定义适配器吗?

也许在您的 getViewTypeCount() 和 getItemViewType(int position) 中它会超出范围。视图类型计数应从 (0, n] 开始,但项目视图类型应为 [0, n)。

例如视图类型计数应为 2

但视图类型应该是 0 和 1,而不是 1 和 2。

【讨论】:

    【解决方案2】:

    尝试覆盖适配器类的getCount()函数:

    @Override
    public int getCount() {
    return [list that contains data].size();
    }
    

    【讨论】:

    • 谢谢。我不知道为什么我的列表视图超出了范围。它一直运行良好,除非我正在刷新搜索。再次感谢您!
    【解决方案3】:

    当列表改变大小时,您是否尝试过将用户重置到列表顶部或尽可能靠近?

    【讨论】:

      【解决方案4】:

      抱歉,这可能不是问题的答案,但对我来说,无限循环似乎不是正确的方法,即使它是一个异步任务。

      我会尝试使用 AlarmManager 或 Timer。

      话虽如此,您所拥有的似乎是一个竞争条件,请考虑到当您请求数据或特定位置并重建视图时它不是立即的。

      干杯, 弗朗西斯科。

      【讨论】:

      • 谢谢,弗朗西斯科。我接受了您的建议并尝试使用计时器,但我仍然遇到同样的错误。有一个竞争条件正在发生,我认为 Timer 会解决它。尽管如此,它仍然很少发生。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多