[解決済み】Android、ListView IllegalStateException。"アダプタの内容が変更されましたが、ListViewは通知を受け取っていません"
質問
やりたいこと : ListViewの内容を計算するバックグラウンドスレッドを実行し、結果を計算する間、ListViewを部分的に更新します。
避けなければならないことが分かっていること : ListAdapterの内容をバックグラウンドスレッドからいじることはできないので、AsyncTaskを継承して、onProgressUpdateから結果(アダプタへのエントリの追加)を発行するようにしました。アダプタは結果オブジェクトの ArrayList を使用し、その ArrayList に対する操作はすべて同期化されています。
他の方々の研究
非常に貴重なデータです。
こちら
. 私も ~500 人のユーザーのグループでほぼ毎日クラッシュに悩まされましたが、私が
list.setVisibility(GONE)/trackList.setVisibility(VISIBLE)
ブロックに追加したところ、クラッシュは10分の1に減少しましたが、消滅したわけではありません。(それは
答え
)
時々受け取るもの このような現象はめったに起こりません(3.5kユーザーのうち1人は週に1回)。しかし、私はこのバグを完全になくしたいと思っています。以下はスタックトレースの一部です。
`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(2131296334, class android.widget.ListView) with Adapter(class com.transportoid.Tracks.TrackListAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1432)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:2062)
at android.widget.ListView.onTouchEvent(ListView.java:3234)
at android.view.View.dispatchTouchEvent(View.java:3709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
[...]
ヘルプは? 不要になりましたので、以下をご覧ください。
ファイナルアンサーです。
結果的には、私が電話していたのは
notifyDataSetChanged
5回挿入するごとに、ちらつきや突然のリスト変更を避けるためです。ベースリストが変更されたら常にアダプタに通知するようなやり方ではダメなのです。このバグは、今ではもうとっくになくなりました。
解決方法は?
同じ問題が発生しました。
に項目を追加していたのですが
ArrayList
UIスレッドの外側で
解決方法 私は両方やりました。
adding the items
と呼ばれ
notifyDataSetChanged()
をUIスレッドで実行します。
関連
-
gitlab 設定エラー。リモートリポジトリから読み込めなかったか、ホストキーの検証に失敗しました。
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
アンドロイドスタジオでJunitのエラー問題を解決する
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
telnet'が内部コマンドまたは外部コマンドとして認識されない 解決方法
-
Android Nで報告されたエラーを解決する: android.os.FileUriExposedException: file:///storage/emulated/0/
-
android bluetooth--Bluetooth on、検索、ペアリング、接続
-
超シンプルなアンドロイドのタイムディレイ機能
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android端末にADBが接続できない!を解決。理由: デバイスが認証されていない!
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
Android: インポートモジュールエラー Android リソースのリンクに失敗しました
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
android studioが "The activity must be exported or contain an intent-filter" と表示され実行される。
-
例外「指定された子にはすでに親がいます」の解決方法。removeViewを呼び出す必要があります" の解決方法(ソースコード付き例)
-
GoogleMapと連携し、位置情報の取得が可能
-
エラータイプ 3 タイプエラー, Error: アクティビティクラス{}が存在しません。アクティビティ起動時のエラー 解決方法
-
Androidのカラーグラデーション実装のまとめ
-
Android TextViewは、テキスト内容が表示省略記号を超えているかどうかを判断する