配列アダプターを使用したオートコンプリート機能を備えた ListView がありますが、これは完全に正常に機能します。私の問題は、リストビューのフィルタリング後にリストアイテムをクリックすると、最初のアイテムの位置インデックス0、2番目のアイテムの1など、フィルターされたリストのアイテムの位置インデックスを取得することです(onlistitemclickリスナーで取得した位置) .
フィルタリングする前に、リストに対する選択した項目の位置インデックスを取得するにはどうすればよいですか?
配列アダプターを使用したオートコンプリート機能を備えた ListView がありますが、これは完全に正常に機能します。私の問題は、リストビューのフィルタリング後にリストアイテムをクリックすると、最初のアイテムの位置インデックス0、2番目のアイテムの1など、フィルターされたリストのアイテムの位置インデックスを取得することです(onlistitemclickリスナーで取得した位置) .
フィルタリングする前に、リストに対する選択した項目の位置インデックスを取得するにはどうすればよいですか?
コード(少なくともアダプターが設定されているスニペット)を投稿するとよいでしょう。以下のようなものを使用したとします。
String[] items={"Item 1", "Item 2", "Item 3"};
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState)
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items));
}
この場合、タグの設定や位置の特定ができない場合があります。大丈夫な位置を見つけるのではなく、文字列の検証を直接行うことができれば。しかし、あなたは100以上のアイテムを持っていると言いました。
そのため、ArrayAdapter などを拡張するカスタム アダプターを作成することをお勧めします。その CustomAdapter の getView (int position, View convertView, ViewGroup parent)メソッドで、各アイテムを TextView に設定しtextView.setText(String[position]);
、その後で各ビュー (textView) のタグを設定します。textView.setTag(position);
最後に、アイテムをフィルタリングした後でも変わらない位置を見つけるlistView.setAdapter(customAdapter);
必要があるように、アクティビティ クラスでカスタム アダプターを設定します。getTag()
私の現在の提案に行きたくない場合に備えて、コードを投稿した後に回答を編集できるかどうか見てみましょう。
ビューを拡張するときは、フィルタリング前に項目がリスト内にあった位置でビューのタグを設定します。
例
view.setTag(originalPosition);
view.setTag(resource_id, originalPosition);
相対位置でビューにアクセスする場合は、view.getTag() を使用して絶対位置を取得します。