【发布时间】:2009-09-25 02:48:18
【问题描述】:
我的ListView(两个TextView,一个图标)有4000 多行,而且滚动速度非常慢。
问题是Cursor 的For{} 语句 使我的程序变得更糟。
我想在用户滚动时显示第一个字符(来自两个TextView 之一)。因此,任何解决方案都可以存档并让我的程序更好。
我的功能是这样的:
public void onScroll(AbsListView view, int firstVisibleItem, int VisibleItemCount, int totalItemCount){
//int lastItem = firstVisibleItem + VisibleItemCount - 1;
Cursor cursor = mDbHelper.loadTitleRaw();
startManagingCursor(cursor);
ArrayList<String> myArrayList = new ArrayList<String>();
for(cursor.moveToFirst(); cursor.moveToNext(); cursor.isAfterLast()) {
String mTitleRaw = cursor.getString(cursor.getColumnIndex(SBooksDbAdapter.KEY_TITLE_RAW));
myArrayList.add(mTitleRaw);
}
String[] mString = myArrayList.toArray(new String[myArrayList.size()]);
if(mReady){
char firstLetter = mString[firstVisibleItem].charAt(0);
if(!mShowing && firstLetter != mPrevLetter){
mShowing = true;
mDialogText.setVisibility(View.VISIBLE);
}
mDialogText.setText(((Character)firstLetter).toString());
mHandler.removeCallbacks(mRemoveWindow);
mHandler.postDelayed(mRemoveWindow, 3000);
mPrevLetter = firstLetter;
}
}
【问题讨论】:
-
为什么每次用户滚动时都要进行查询和 manageCursor 调用?您是否在滚动时加载新数据?否则,您应该只执行一次查询,并且可能使用 CursorAdapter 的变体。
-
不,我不是说滚动时加载新数据。