![](/img/trans.png)
[英]Android ListView Adapter error calling notifyDataSetChanged, Android bug?
[英]Error in notifyDataSetChanged ListView Adapter File
我在数百名用户中收到以下错误。 我在我的代码中使用了它,因为它要求我调用 notifyDataSetChanged() 但它不起作用。 我在下面分享了我的适配器文件。 我为此做了很多研究,但无法确定问题所在。 我需要你的帮助。
问候。
Fatal Exception: java.lang.IllegalStateException
The content of the adapter has changed but ListView did not receive a notification.
确保适配器的内容不是从后台线程修改的,而只是从 UI 线程修改的。 确保您的适配器在其内容更改时调用 notifyDataSetChanged()。 [在列表视图中(2131296786,class android.widget.ListView)
我的适配器代码:
public class TracksAdapter extends BaseAdapter {
private DatabaseReference mDatabaseReference;
Context context;
private static TracksAdapter mInstance = null;
private Activity activity;
private InterstitialAd interstitialAds;
private int pos = -1;
private LoadingDialog progress = null;
List<Track> trackItems;
public void showProgressDialog() {
progress = new LoadingDialog(context);
progress.setCircleColors(context.getResources().getColor(R.color.turu), context.getResources().getColor(R.color.turu), context.getResources().getColor(R.color.turu));
progress.show();
}
public void hideProgressDialog() {
if (progress != null) {
progress.dismiss();
progress = null;
}
}
protected void TracksAdapter(Activity activity) {
this.activity = activity;
}
public TracksAdapter(Context context, List<Track> rowItems) {
notifyDataSetChanged();
this.context = context;
this.trackItems = rowItems;
}
@Override
public int getCount() {
return trackItems.size();
}
@Override
public Object getItem(int position) {
pos = position;
if (trackItems != null && trackItems.size() > position) {
return trackItems.get(position); // Line 54.
}
return null;
}
@Override
public long getItemId(int position) {
return trackItems.indexOf(getItem(position));
}
/* private view holder class */
private class ViewHolder {
String id, names, phones, lastseens, dates;
TextView name;
TextView phone;
TextView lastseen;
Integer membership;
ImageView delete, file;
}
public static TracksAdapter getInstance() {
return mInstance;
}
@RequiresApi(api = Build.VERSION_CODES.O)
@SuppressLint("WrongViewCast")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
}
}
}
这就是我认为的问题所在,让我们先看看你的代码。 这部分就在这里
public TracksAdapter(Context context, List<Track> rowItems) {
notifyDataSetChanged();
this.context = context;
this.trackItems = rowItems;
}
正如您所说,您正在调用notifyDataSetChanged()
,但问题是它在哪里被调用。
您现在在对数据集进行任何更改之前调用它,您应该在分配rowItems
之后调用它。 您之前调用它,那时没有任何改变。
所以正确的代码如下:
public TracksAdapter(Context context, List<Track> rowItems) {
this.context = context;
this.trackItems = rowItems;
notifyDataSetChanged();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.