基本的に、私はインターフェイスを実装し、いくつかの継承された関数を持つアクティビティを持っています。これらの関数はそれぞれ呼び出され、Listアダプタの更新に使用されるデータを渡します。私は前に任意のソリューションを見てきたので、私はハンドラに機能ごとに作業を渡し、Android、ListView IllegalStateException: "アダプタの内容は変更されましたが、ListViewは通知を受け取りませんでした"
@Override
public void onEntriesAdded(List<String> addresses) throws RemoteException {
Log.v(TAG, "Entries Added notify!");
listEntriesAdd.clear();
listEntriesAdd = addresses;
rosterHandler.sendEmptyMessage(1);
}
@Override
public void onEntriesUpdated(List<String> addresses) throws RemoteException {
Log.v(TAG, "Entries Updated notify!");
listEntriesUpdate.clear();
listEntriesUpdate = addresses;
rosterHandler.sendEmptyMessage(2);
}
@Override
public void onEntriesDeleted(List<String> addresses) throws RemoteException {
Log.v(TAG, "onEntries deleted " + addresses);
listEntriesDel.clear();
listEntriesDel = addresses;
rosterHandler.sendEmptyMessage(3);
}
:これはスニペットです
private Handler rosterHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case 0:
// adding or any List<String> elements operations
break;
case 1:
// adding or any List<String> elements operations
break;
case 2:
// adding or any List<String> elements operations
break;
case 3:
// adding or any List<String> elements operations
break;
case 4:
// adding or any List<String> elements operations
break;
}
mAdapterContact.notifyDataSetChanged();
}
};
してから、だろうServiceConnectionクラスがあります私はbindServiceを実行したときに呼び出さ:
@Override
protected void onResume() {
super.onResume();
if (!mBinded) {
Log.d(TAG, "Request BIND Service");
mBinded = bindService(SERVICE_INTENT, mServConn, BIND_AUTO_CREATE);
}
}
とサービスクラス:
private class MyServiceConnection implements ServiceConnection {
public MyServiceConnection() {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
globalBinder = service;
mXmppFacade = IXmppFacade.Stub.asInterface(service);
try {
mRoster = mXmppFacade.getRoster();
if (mRoster != null) {
Log.i(TAG, "REBUILD ROSTER!!!");
rosterHandler.sendEmptyMessage(0);// send it to handler
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
try {
mRoster.removeRosterListener(ContactList.this);
} catch (RemoteException e) {
e.printStackTrace();
}
mXmppFacade = null;
mChatManager = null;
mRoster = null;
mListContact.clear();
mListGroup.clear();
mContactOnGroup.clear();
mBinded = false;
}
}
私は現在、リストを実際には、このような拡張リストビューを更新しています... しかし、このエラーが発生するたびにAndroid、ListView IllegalStateException: "アダプタの内容は変更されましたが、ListViewは通知を受信しない "!
私は本当に混乱し、私はこのエラーを回避するために、適切にこれらの手順を配置し、まだ私のリストを更新することができますかわからない:(
助けてください!
後
notifyDataSetChanged()
を呼び出そう。本当のリストアダプタですが、使用していませんでした'notifyDataChanged'を実行すると、このエラーがスローされます。上のコードから、私はあなたのアダプタのデータがどのリストであるか知りません。 – idiottiger