問題タブ [notifydatasetchanged]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
56 参照

android - 別のフラグメントからローダーを更新する

2種類のクラスがあります。クラスAとクラスB。ClassAList<B>クラス変数として a を持ちます。

これで、(カーソルで取得されたデータで形成された) インスタンスのリストをListFragment A使用ACursorAdapterおよび実装してロードする ができました。これはそれ自体でうまく機能します。LoaderCallBacks<Cursor>A

また、ListFragment Bこれを使用BCursorAdapterして実装するため、インスタンスLoaderCallBacks<Cursor>のリストをロードします。Bこれは、それ自体でも正常に機能します (カーソルで取得されたデータで形成されます)。

ここで、選択した項目を ( を介してContentProvider) から削除するListFragment Bと、すべての項目が特定のAインスタンスを形成するようになり、対応する項目もAデータベースから削除されます。ただし、に戻ると ListFragment A、カーソル ローダーには削除された情報がまだ含まれており、削除されたばかりのインスタンスを表示している間にnullpointerA例外がスローされます。

ContentProvider私の呼び出しのすべてのメソッドgetContext().getContentResolver().notifyChange(uri, null)。しかし、まだ ListFragment A は更新されていません。

では、アダプター/カーソルの更新ListFragment Aを通知するにはどうすればよいですか?ListFragment B

どんな助けでも大歓迎です。

0 投票する
0 に答える
248 参照

android - Android: ListFragment での onDataSetChanged() 呼び出しが機能しない

利用可能なすべての Bluetooth デバイスを一覧表示する ListFragment があります。ただし、アプリケーションでフラグメントを切り替えてから ListFragment に戻すと、アダプター内のすべてのデータはまだそこにありますが、リストには何も表示されません。コードは次のとおりです。

初めて ArrayAdapter にアイテムを追加し、notifyDataSetChanged を呼び出すと、完全に正常に動作します。ただし、ListFragment を離れて戻ってくると、以前と同じリストが表示されるはずですが、何も表示されません。以前のように ArrayAdapter にデータを再度追加しても、そうではありません。onCreateView 関数で ArrayAdapter にデータを追加している ArrayList が空ではありません。

アドバイスありがとうございます!

0 投票する
0 に答える
99 参照

android - Android gridviewのアイコンセットを切り替える

私はアンドロイド開発が初めてです。私のアンドロイドactivityにはGridViewと がありButtonます。GridView adapterクラスは に一連のアイコンを表示していますGridView。私が望むのは、Buttonアクティビティ内の がクリックされた場合、内のアイコンのGridViewセットを別のアイコンのセットに置き換える必要があるということです。また、アクティビティでクリックするたびButtonに、 の 2 つのアイコン セットが切り替わりますGridView。それで、これを使用してこれを行う方法はnotifyDatasetChanged()?助けてください。

GridView Adapterクラス:

ボタンの onclick リスナー:

0 投票する
1 に答える
1458 参照

android - 画像が置き換えられたときにグリッドビューを動的に更新します。notifyDataSetChanged() が機能しない

GridViewSDカードから画像をロードする(存在する場合)それ以外の場合は、デフォルトの画像があります。画像が読み込まれると、ユーザーは任意の画像セルを選択して新しい写真を撮ることができます。デフォルトの写真が読み込まれGridView、ユーザーが写真を撮るGridViewと、画像が更新されて表示されますが、ユーザーがセルをもう一度クリックして新しい写真を撮ると、GridView更新されません。アプリを強制終了して再起動すると、新しい画像が表示されます。

試してみnotifyDataSetChanged()ましたが、画像が更新されたときに機能しません。

コードは次のとおりです。

}

0 投票する
1 に答える
8771 参照

android - notifyDataSetChanged() が展開可能なリスト ビューを更新しない

私は使用してExpandable ListViewおり、その中のデータはデータベースを介して入力されていSqliteます。グループを削除するオプションを指定しましたExpandableListViewが、実際rowにはデータベース内のそれぞれが削除されます。ただし、アクティビティは更新されず、削除された「ケース」は、戻って this に戻るまで表示されますactivity 私はそれを作成しましclassextends *BaseExpandableListAdapter*。すべてのoverriddenメソッドが含まれています。コードは次のとおりです。

今別のものがありますclass RunningCase.javawhich extends Activity. これclassは、 にデータを入力するために使用されExpandableListViewます。OnLongClick()のいずれかのグループを (長押し) するとExpandableListView、 が表示されcontext menuます。には、そのケースをデータベースから削除して を更新するための [削除]context menuオプションが含まれています。RunningCase activity

メソッドdb.getRunning()は、db.getRunning_child()データベースからデータを取得します。また、以下は完全に機能しているデータベースからケースを削除するコードです。

私を助けてください。activityケースを削除すると、 が更新され、削除されたケースが表示されなくなります。前もって感謝します!!

0 投票する
1 に答える
883 参照

android - 私のGridView/ListViewは、Android API 18+でタッチした後にのみレンダリングされます

更新: BaseAdapter に基づくグリッドビュー/リストビューが Android 4.3 で動作しなくなりました。Android 4.2 以下で実行すると、正常に動作します。

毎回新しいビューを膨らませる「ダム」getView()で試してみましたが、何も変わりません。

元の質問:

リストビューとグリッドビューがあります。これらは、私のデータの 2 つの異なるグラフィック表現です。私の問題は両方に当てはまるので、これからは adapterview のみを記述しますが、両方を意味する可能性があります。

BaseAdapter を拡張するカスタム アダプターを使用して、アダプター ビューをセットアップします。ほとんどの場合は機能しますが、(PreferenceActivity インテントで) 設定を変更し、データセットを変更して notifyDataSetChanged() を呼び出すと、画面が更新されないことがあります。より正確には、一部の項目は更新されますが、残りは変更前と同じように画面に表示されます。

私は多くのチュートリアルを読み、Romain Guy のビデオを見ましたが、非常に基本的なことを見逃しているようですが、それが何であるかを理解できません。

デバッグを追加しましたが、奇妙なことに、notifyDataSetChanged() を呼び出した後、getCount() が呼び出され、番号が変更されたことがわかります。また、getView() を呼び出しても、アイテムが更新されません。画面上。ただし、画面に触れた後、すべてがレンダリングされます(ただし、表示されているすべてのビューに対して getView() が再度呼び出されます)

これは私の getView() 関数の始まりです:

convertView1 を CategoryListItemView にキャストする理由は、後で getView() でカスタム関数を使用するためです。

私のアダプタービューはGridViewまたはListViewのいずれかであり、それに応じてアイテムはcategory_grid_itemまたはcategory_list_itemのいずれかであり、2つの視覚化の間で変更するたびにアダプターを無効にします(とにかく私の問題はありません)

0 投票する
2 に答える
75 参照

android - notifyDataSetChanged() は最後に更新されます

複合リスト ビューのモデル値を計算するRunnableクラスがあります。そのランナブルには、カスタム スレッド内に UI スレッドがあります。そこにアダプターのnotifyDataSetChanged()呼び出しがありnotifyDataSetChanged()ますが、メインレイアウトの TextView 値を更新しようとした後です。問題は、実行中の TextView が最初に更新され、次に ListViews が更新されて更新される場合です。カスタムクラスが最後に更新されるということnotifyDataSetChanged()は、Adapter私には適していません。これらの画面の更新を同期する可能性はありますか?

サンプルコードは次のとおりです。

0 投票する
0 に答える
1034 参照

android - 複数の連続したアダプターの notifyDataSetChanged 呼び出しで ListView が更新されない

これは非常に深刻なバグのある動作であり、なぜこれが機能しないのかわかりません。

My Adapter (extending BaseAdapter) は、2 つの独立したタイプのデータを結合します。1 つはカーソルで、もう 1 つは要素のリストを取ります。両方のセッターが data と force を受け取りますnotifyDataSetChanged():

これらの要素のデータはAsyncTaskLoader、ローダー フレームワークを使用して 2 つの独立した方法で収集されます。具体的には、これらのセッターは対応するLoaderCallbacks.onLoadFinishedメソッドから呼び出されます。

ユーザーが異なるデータを表示することを選択すると、両方のローダーが my で起動されますFragment

の再描画を視覚化するために、アダプターのメソッドListView内でログを記録します。getView

Android 4.3 を実行しているメインの開発デバイスでは、すべてが期待どおりに動作します。

1) ユーザー トリガーが変更される 2) 両方のローダーが起動する 3) 2 つのローダーが個別に起動し、それぞれが起動し、notifyDataSetChanged多くのgetViewログ出力が表示されますが、重要なのは、2 番目のローダーが終了した後、リストが再び再描画されることです。

概略的に:

  • トリガーローダー1
  • トリガーローダー2
  • ローダー1完成
  • ローダー 1 からの notifyDataSetChanged
  • getView pos 1 (ローダー 1 のデータからの変更を反映)
  • getView pos 2 (ローダー 1 のデータからの変更を反映)
  • getView pos 3 (ローダー 1 のデータからの変更を反映)
  • ローダー2完成
  • getView pos 4 (ローダー 1 のデータからの変更を反映)
  • ローダー 2 からの notifyDataSetChanged
  • getView pos 5 (ローダー 1 のデータからの変更を反映)
  • getView pos 1 (ローダー 2 のデータからの変更を反映)
  • getView pos 2 (ローダー 2 のデータからの変更を反映)
  • getView pos 3 (ローダー 2 のデータからの変更を反映)
  • getView pos 4 (ローダー 2 のデータからの変更を反映)
  • getView pos 5 (ローダー 2 のデータからの変更を反映)

リストには、新しい情報がうまく表示されます。

しかし、今では信じられません。Android 4.2 では、次のことが起こります。

  • トリガーローダー1
  • トリガーローダー2
  • ローダー1完成
  • ローダー 1 からの notifyDataSetChanged
  • getView pos 1 (ローダー 1 のデータからの変更を反映)
  • getView pos 2 (ローダー 1 のデータからの変更を反映)
  • getView pos 3 (ローダー 1 のデータからの変更を反映)
  • ローダー2完成
  • getView pos 4 (ローダー 1 のデータからの変更を反映)
  • ローダー 2 からの notifyDataSetChanged
  • getView pos 5 (ローダー 1 のデータからの変更を反映)

  • THE END - 2 番目のローダーの notifyDataSetChanged を反映する getView はもうありません。

これがより明確になることを願っています。

UIスレッドで常に呼び出されるnotifyDataSetChangedに関する私の仮定は、次のとおりです。呼び出すたびに、すべての要素の再描画を強制する必要があります。しかし、これは起こりません。