問題タブ [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 投票する
1 に答える
1114 参照

android - アダプターのデータが変更されたときの ListView アイテムの背景の更新

ListFragment にアイテムをリストするアプリケーションがあります。各アイテムの背景色は、アイテムのステータスに基づいて異なります。アイテムは SQL に格納されるため、アダプターは SimpleCursorAdapter からサブクラス化されます。これらのアイテムの編集は、別のフラグメントで行われます。ステータスが変更されたら、AsyncTask を使用して GUI スレッドの Adapter で notifyDataSetChanged() をトリガーします。しかし、私のリストは更新されていません。

確認するために notifyDataSetChanged クラスをオーバーライドしたため、GUI スレッドにいることはわかっています。同じトレースは、ルーチンに到達していることも示しています。

提案をいただければ幸いです。お時間と関心をお寄せいただきありがとうございます。

アダプタ全体は次のとおりです。

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

android - 開いている Spinner で notifyDataSetChanged() を実行できません

  1. に 5 個のアイテムがありますSpinner。API 呼び出しを開始する更新ボタンをクリックすると、更新で終了しSpinnerます。
  2. すぐにスピナーをタップして開きます。
  3. Spinnerが開いている間に API 呼び出しが終了し、呼び出しもnotifiyDataSetChanged()行われます (これは保証できます。ログで確認したので、データはそこにあります)。
  4. 残念ながら、Spinner はビューを更新しません。そのため、更新後に 5 ではなく 6 のアイテムが期待される場合でも、5 と表示されます。

スピナーを開かずにテストを繰り返し、更新が完了した後に開くと、6 つのアイテムが表示されます。したがって、問題はnotifyDataSetChanged()メソッドの周りにあります。

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

android - notifyDataSetChanged がリストビューを更新しない

最初に、サーバーからデータのリストを取得し、リストビューに設定します。

リストビューを下にスクロールすると、サーバーからデータのコレクションが取得され、カスタム アダプターの notifydatasetchanged が呼び出されます。

カスタムアダプターのgetView()メソッドで、サーバーからayntaskで画像をダウンロードしています。正常にダウンロードされ、ローカルに保存されている場合。次に、その非同期タスクの onPostExecute でリスト ビューを更新しようとしています。しかし、それはリフレッシュされていません。

onPostExecute のログは印刷されていますが、リストビューは更新されていません。

public void loadBitmap(MainActivity mainActivity, String imageKey,ImageView imageView, boolean isScrolling) { 最終ビットマップ ビットマップ = getBitmapFromCache(imageKey);

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

android - OnClickListener 内の Android ListView データの更新

私は Android で個人的なプロジェクトに取り組んでおり、ListView を使用するアクティビティに関して奇妙な状況に遭遇しました。問題の基本は、アイテムのリストがあり、それぞれに編集と削除の 2 つのボタンがあることです。現在、機能的には機能する [削除] ボタンの実装に取り​​組んでいますが、ListView が正しく更新されません。代わりに、削除されたばかりのものをリストの一番上に置きます。もちろん、そのアクティビティに移動するたびに更新されます。

現在、カスタム BaseAdapter 内で [削除] ボタンが検出されており、notifyDataSetChanged を呼び出すと、現在削除されているアイテムを削除する代わりに、上記の状況が発生します。アダプター クラス内のリストを正しく更新するにはどうすればよいですか?

これについていくつかの質問があったことは認識していますが、それらを統合することはできませんでした。うまくいくと思う解決策は、それらがどのように機能するかを実際には説明していません。私はこのプロジェクトを使用して Android アプリの開発をより理解しています。ありがとう!

関連するコードは次のとおりです。これは未完成のプロジェクトであるため、未使用/不完全なものが含まれていることに注意してください。これらは無視してください。

EditItemsActivity:

そして、アダプタークラスは次のとおりです。

編集: ソリューションには、Adam が提供したインフレーションの説明が含まれていましたが、dpList の完全な再作成が必要でした。

Anupが提案した。

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

android - CursorAdapter でカーソルを変更しても、リスト アイテム ビューが正しく更新されない

この質問は、StackOverflow に関する他の多くの質問と非常によく似ていますが、ここの他の質問とはアプローチが異なるため、独自の投稿に値すると思います。

を拡張するカスタム アダプターがありますCursorAdapternotifyChangeカーソルを更新するために、データを更新し、適切な URIを呼び出しています。デバッグでは、これが正しく機能していることがわかります。

残念ながら、私のリスト ビューは再作成されていません。newViewそれらを再作成する必要があるのは、アダプターでの実装のためです。

問題は、呼び出しnotifyChangeがリスト データを更新していることですが、必要なビューを .sys 経由で再作成していないことですnewView

私が試した他のいくつかのことは、同様に機能しませんでした:

  • adapter.notifyDataSetChanged()データが更新された後に呼び出されます。
  • データが更新さcontentResolver.notifyChange(...)れた後に呼び出されます。adapter.notifyDataSetChanged()
  • と呼ばれ、adapter.changeCursor(newCursor)その後にadapter.notifyDataSetChanged().
  • view.invalidate()変更された特定のリスト項目で呼び出されます。

これにアプローチする方法に関する他の提案はありますか?

編集:私はまったく間違ったアプローチを取っているだけかもしれません。アダプター内でのビューのリサイクルを誤解していました。リサイクル時に間違ったタイプのビューが使用されているようです。そのため、おそらく別のアプローチを使用してビューのスタイルを設定する必要があります。そもそもこのアプローチを採用した理由は、この StackOverflow question で説明されているように、ビューを膨らませる以外にプログラムで設定できないスタイルを使用したいという私の願望によるものです。リスト項目ビューを適切にリサイクルしながら、その答えを利用するアプローチを受け入れます。

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

android - GridView が notifyDataSetChanged() で更新されない

ActivitywithがGridViewあり、画像が含まれています。画像は、デバイスの SD カードから解析されます。がActivity起動すると、 を使用して画像が SD カードにダウンロードされますAsyncTask

問題は、GridView画像がダウンロードされたときにこれが更新されないことです。ディレクトリにさらに画像が追加された場合 (つまり、さらに画像がダウンロードされた場合) に、これを更新したいと考えてGridViewいます。notifyDataSetChanged()とを試しinvalidateViews()ましたが、役に立ちません。

MainActivity、Image アダプター、およびAsyncTask. どこで間違いを犯したのか教えてください。

主な活動:

getView()イメージ アダプターの数:

画像ダウンローダー:

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

android - Android notifydatasetchange() は新しいビューを作成しますが、レイアウトの位置を維持してビューを更新する必要があります

私はHorizo​​ntalViewでリストビューを作成しました。この ListView の各位置には、水平方向にスクロールできる一連の画像がある Horizo​​ntalView が含まれています。

リストが垂直方向にスクロールしているときにリストが最後に到達するたびに、リストビューの notifydatasetchange() メソッドを呼び出します。このメソッドは、インターンがリストの新しいビューを作成します。

マイリストビューはこんな感じ

ここに画像の説明を入力

ここに画像の説明を入力

私の問題は次のとおりです。

ListView の位置 0 にある水平ビューの画像 12 にいるとします。notifydatasetchange() が呼び出されると、すべてのビューが自動的に更新され、Image の位置が ListView の位置 0 で 0 になります。

ユーザーが特定の画像を何度もスクロールするのはイライラすることがあります。

ビュー上の画像の位置を維持する必要があるため、リロードすると、notifydatasetchange() を呼び出す前と同じように自動的に表示されます。

注 : ListView に Horizo​​ntal scrollView を設定するために 2 つのアダプターを使用しています。

アダプター 1

アダプター 2

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

android - ボタン INSIDE アダプターで ListView を更新する

ListAdapter があります

中身

私は持っている

内部onClick()では、データベースから行を削除します (以前にビューに保存した位置を使用)。その後、ListView が更新されたことを確認したいと思います。それを行うには、どの命令を使用するOnClick必要がありますか?

で試しましnotifyDataSetChanged()たが、うまくいかないようです。

解決

データベースから行を削除しただけで、アダプターの値を更新するのを忘れていました。それをした後、notifyDataSetChanged()完全に機能します!