1

CheckedTextViews で満たされた ListView を作成しようとしています。フィルターを使用して、ユーザーが ListView をすばやく検索できるようにしています (これは、カスタム ArrayAdapter を持つ配列によってサポートされています)。リストビューを宣言する XML に multipleChoice フラグを設定しました。フィルターを使用しない場合は、複数のエントリをチェック/チェック解除できます。フィルターを使用してエントリを検索すると、エントリを選択できます。ただし、(バックスペースを押して) フィルターをクリアすると、チェックしたい実際のエントリではなくなったにもかかわらず、同じ位置のエントリがチェックされたままになります。

アダプタの getView() メソッドで CheckedTextView のチェック状態を手動で設定しようとしましたが、うまくいかないようです。念のため、ListView のすべての CheckedTextView でisChecked を false に設定しようとし ましたが、フィルターの使用中にチェックされた CheckedTextView はチェックされたままです。

このようなものを実装したり、推奨事項を持っている人はいますか?

ありがとうアダム

4

2 に答える 2

4

ListView#clearChoices()を見たいと思うかもしれません。ListView 自体は、アイテムの ID ではなく、アダプター アイテムの位置に基づいて選択を維持しています。そのため、位置が変更された場合 (たとえば、フィルタリングによって)、選択肢の位置は本質的に無効になります。

また、 ListView#getCheckedItemIds()取得できるチェック済み ID のリストも維持し、アダプターが安定した ID を持っている限り (つまり、特定の IDは常に同じ概念アイテムを参照し、アイテムの順序またはフィルタリング)、フィルタリングが変更されたときにそれを使用して、チェックされた位置を復元できます (ID を位置に一致させるには、アダプター全体を反復する必要があります)。

于 2011-06-21T03:33:34.340 に答える
-1

私はListView.clearChoices()を見ていましたが、別の方法があることを望んでいました。私がやったことは、フィルターが変更されるたびにListView.clearChoices()を呼び出し、選択されたものを手動で追跡し、ArrayAdapter.getView( )からListView.setItemChecked()を呼び出すことでした。これにより、リスト全体を常に反復処理する必要がなくなります。

于 2011-06-21T13:49:58.973 に答える