gpt4 book ai didi

android - adapter 的内容发生了变化但是 ListView 没有收到通知,后台没有更新

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:04 24 4
gpt4 key购买 nike

我已经在 SO 上阅读了很多关于这个的内容,但我无法找到适合我的情况的解决方案。这是设置:

Activity A,包含列表和正在显示的数据。当我的数据管理器的异步任务完成更新时,会发生以下情况:

protected void onPostExecute(Void v) {
super.onPostExecute(v);

if (editedDataSectionRows == null)
editedDataSectionRows = new int[] {0, 0, 0, 0, 0, 0, 0};

mData= editedData;
mSectionRows = editedDataSectionRows;

if (mCallback != null) {
mCallback.dataUpdated();
}
}

当数据更新时,activity A 获得回调并执行以下操作:

@Override
public void dataUpdated() {
mData = mDataManagerInstance.getData();
mDataSectionCount = mDataManagerInstance.getDataSectionRows();
mListAdapter.notifyDataSetChanged();
}

mData 是一个包含所有“行”的 ArrayList,mDataSectionCount 是一个 int[],包含有关 mData 应如何拆分为多个部分的信息。

现在,Activity A 有一个可以打开第二个 Activity 的选项菜单。 Activity B。

时不时地运行 Monkey 和 Activity B 完成。我的 Activity A 的 onResume 被调用:

@Override
protected void onResume() {
super.onResume();
mDataManagerInstance = DataManager.getInstance();

mDataManagerInstance.setDataUpdatedListener(this);
mDataManagerInstance.updateData();

this.invalidateOptionsMenu();
}

(如果 AsyncTask 尚未运行,updateData 只会触发它)然后狗屎打了风扇......:

FATAL EXCEPTION: main
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(-1, class com.applidium.headerlistview.HeaderListView$InternalListView) with Adapter(class se.*.android.activities.ListActivity$1)]
at android.widget.ListView.layoutChildren(ListView.java:1582)
at android.widget.ListView.commonKey(ListView.java:2104)
at android.widget.ListView.onKeyDown(ListView.java:2085)
at android.view.KeyEvent.dispatch(KeyEvent.java:2620)
at android.view.View.dispatchKeyEvent(View.java:7149)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1458)
at android.widget.ListView.dispatchKeyEvent(ListView.java:2070)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1898)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1375)
at android.app.Activity.dispatchKeyEvent(Activity.java:2356)
at com.actionbarsherlock.app.SherlockFragmentActivity.dispatchKeyEvent(SherlockFragmentActivity.java:122)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1825)
at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3585)
at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3555)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2805)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:4787)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)

有什么想法吗?

最佳答案

尝试在 ui 线程中这样做

runOnUiThread(new Runnable(){
public void run() {
mListAdapter.notifyDataSetChanged();
}
});

关于android - adapter 的内容发生了变化但是 ListView 没有收到通知,后台没有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23674413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com