我遇到导致我的应用崩溃的ListView问题。整个应用程序不会崩溃,它只是关闭视图并重新加载主要活动。看起来效果很好,当滚动速度很快时,它基本上是稳定的。但是如果我使用快速滚动几次向上和向下滚动屏幕将冻结,它将重新加载主要活动。有人能帮我找到问题所在吗?这是我崩溃时从LogCat收到的错误:
Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 12439 (AsyncTask #4)
以下是我的代码:
getView()方法
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
View vi = convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.custom_layout, null);
vi.setMinimumHeight(120);
holder = new ViewHolder();
holder.text = (TextView) vi.findViewById(R.id.text);
holder.icon= (ImageView) vi.findViewById(R.id.icon);
vi.setTag(holder);
}
holder = (ViewHolder) vi.getTag();
holder.position = kanji_ids.get(position);
holder.context = vi.getContext();
new DownloadAsyncTask().execute(holder);
return vi;
}
这是获取数据并显示它的AsyncTask ......
class DownloadAsyncTask extends AsyncTask<ViewHolder, Void, ViewHolder> {
String icon;
String text;
@Override
protected ViewHolder doInBackground(ViewHolder... params) {
ViewHolder viewHolder = params[0];
Context context = viewHolder.context;
Database db = Database.getInstance(context);
text = db.getPercentByPosition(viewHolder.position);
icon = db.getIconByPosition(viewHolder.position);
return viewHolder;
}
@Override
protected void onPostExecute(ViewHolder result) {
if (result.icon == null) {
result.icon.setImageResource(R.drawable.loading);
} else {
result.icon.setImageResource(icon);
}
result.text.setText(text);
}
}
答案 0 :(得分:0)
这可能是因为图标不再可见,并且当您滚动时该视图被重新用于新行。您应该使用WeakReferences并检查viewHolder或图标是否为空,如果是,您可以放弃更改。同样适用于文本。