【发布时间】:2014-08-04 09:49:25
【问题描述】:
我使用了列表视图,有超过 65,000 条记录,滚动不是快速流畅,如果我一次又一次滚动它,应用程序崩溃,没有任何错误或任何 ANR 对话框,谁能帮忙我来解决这个问题?
我正在使用SimpleCursorLoader 和CursorAdapter,下面是我的代码:
private static class DotCursorLoader extends SimpleCursorLoader {
private DbHelper mHelper;
private CharSequence filter;
public DotCursorLoader(Context context, DbHelper helper,
CharSequence filter) {
super(context);
mHelper = helper;
this.filter = filter;
}
@Override
public Cursor loadInBackground() {
return mHelper.getCursor(filter);
}
}
private class DotCursorAdapter extends CursorAdapter {
private Context mContext;
private Typeface font;
public class ViewHolder {
TextView txtEng, txtGuj;
}
// public DotCursorAdapter(Context context, Cursor c, int flags) {
// super(context, c, flags);
// mContext = context;
// }
public DotCursorAdapter(Context context, Cursor c,
boolean autoRequery) {
super(context, c, autoRequery);
mContext = context;
}
@Override
public void bindView(View view, Context context,
android.database.Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
if (LibConstants.isEnglishEnabled(mActivity)) {
holder.txtEng.setTextColor(settings.getInt(
LibConstants.English_Pref_Color_Key,
Color.BLACK));
// txtEng.setTypeface(Typeface.DEFAULT);
holder.txtEng.setTextSize(Integer.parseInt(settings
.getString("TextSize", "20")));
holder.txtEng.setText(LibConstants.getWord(cursor
.getString(1)));
Utils.setEnglishFont(holder.txtEng, mActivity);
holder.txtGuj.setTextColor(settings.getInt(
LibConstants.Mean_Pref_Color_Key,
getResources().getInteger(
R.color.blue)));
holder.txtGuj.setTypeface(font);
holder.txtGuj.setTextSize(Integer.parseInt(settings
.getString("TextSize", "20")));
holder.txtGuj.setText(LibConstants.getWord(cursor
.getString(2)));
} else {
holder.txtEng.setTextColor(settings
.getInt(LibConstants.Mean_Pref_Color_Key,
getResources().getColor(
R.color.blue)));
holder.txtEng.setTypeface(font);
holder.txtEng.setTextSize(Integer.parseInt(settings
.getString("TextSize", "20")));
holder.txtEng.setText((cursor
.getString(2)));
holder.txtGuj.setTextColor(settings.getInt(
LibConstants.English_Pref_Color_Key,
Color.BLACK));
holder.txtGuj.setTypeface(Typeface.DEFAULT);
holder.txtGuj.setTextSize(Integer.parseInt(settings
.getString("TextSize", "20")));
holder.txtGuj.setText(cursor
.getString(1));
Utils.setEnglishFont(holder.txtGuj, mActivity);
}
}
@Override
public View newView(Context context,
android.database.Cursor cursor, ViewGroup parent) {
View view = LayoutInflater.from(mContext).inflate(
R.layout.list_item, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.txtEng = (TextView) view
.findViewById(R.id.txtEng);
viewHolder.txtGuj = (TextView) view
.findViewById(R.id.txtGuj);
view.setTag(viewHolder);
return view;
}
}
【问题讨论】:
-
你能显示logcat的输出吗?如果应用程序崩溃了,一定有一些错误
-
@helleye 不,没有任何错误正在生成,也没有任何异常抛出只是应用程序消失了:(
-
但是至少应该指出应用程序(活动)被破坏了
-
@helleye 如果我慢慢滚动它,一次又一次这么多次,它不会崩溃,但在更快滚动时它会崩溃
-
可能是内存不足。增加应用程序的内存可能会解决您的问题或使用分页而不是一次加载 65000 个项目。
标签: android listview simplecursoradapter android-cursoradapter android-cursorloader