現在、アプリでcwac-mergeを使用していますが、問題に直面しています。
したがって、このリストビューにはさまざまな部分があります。MergeAdapter に追加された最初のものまたは静的ビュー。それらは、アクティブ化/非アクティブ化せずに直接追加されます。
次に、他のアダプターを my に追加し、MergeAdapter
ですぐに非表示にしsetActive()
ます。これらは非同期に入力されますが、前に追加されlistView.setAdapter(adapter)
ます。だから私はアダプタごとにこれをやっています:
- にアダプターを追加
MergeAdapter
しますadapter.addAdapter(subAdapter)
- で隠します
adapter.setActive(subAdapter, false)
- データが取得されたら、取得した項目を subAdapter に追加し
subAdapter.addItems(items)
、アダプターを次のように表示します。adapter.setActive(subAdapter, true)
すべてが完璧に機能しており、私のビューは 1 つのことを除いて良好に見えます。のトップ ビューにいくつかのボタンがありますMergeAdapter
。クリック動作がおかしい。クリック イベントは、スクロール後にのみ発生することがありますListView
。setActive()
関数で遊んだ場合にのみ発生することに気付きました。すべての電話にコメントするsetActive()
と、問題を再現できなくなります。複数回クリックしてからスクロールすると、多くのクリックが発生します。
ここにいくつかのスクリーンショットがあります。静的ビューは、画像と 4 つのボタンを含むビューです。次に、動的な部分はアダプターです (伝記、最後に再生された曲、ベスト トラック)。
更新: それぞれをアクティブ化した後に subAdapter.notifyDatasetChanged() を呼び出すことで、なんとか修正できました。それはまだハックであり、毎回機能するとは限りません。
更新:次のことを考えると、これはライブラリでカバーされるべきだと思います:
ただし、基になるアダプターを変更できることに注意してください。したがって、たとえば、CursorAdapter を MergeAdapter に追加し、Cursor を requery() すると、変更は MergeAdapter を介して、MergeAdapter が接続されている AdapterView に反映されます。