我正在开发一个主要由列表视图组成的应用程序。它由我自己的自定义数组适配器支持,其大小每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
的函数。
有解决这个问题的好方法吗?
此致
答案 0 :(得分:2)
您使用的是自定义适配器吗?
也许在你的getViewTypeCount()和getItemViewType(int position)中,它超出了界限。视图类型计数应为(0,n),但项视图类型应为[0,n)。
E.g。视图类型计数应为2
但视图类型应为0和1,而不是1和2.
答案 1 :(得分:2)
尝试覆盖适配器类的getCount()函数:
@Override
public int getCount() {
return [list that contains data].size();
}
答案 2 :(得分:0)
您是否尝试将用户重置为列表顶部或在列表更改大小时尽可能接近?
答案 3 :(得分:0)
很抱歉,也许不是这个问题的答案,但对我来说这种无限循环似乎不是正确的方法,即使它是异步任务。
我会尝试使用AlarmManager或Timer。
话虽如此,看来你所拥有的是一种竞争条件,考虑到当你要求数据或特定位置并重建视图时,它不是立即。
干杯, 旧金山。