0
私は検索可能なListViewを持っています。その項目はItemオブジェクトで、その名前にはString、drawableリソースにはintが含まれています。searchviewでリストから正しい項目を取得する
エントリを検索して選択すると、位置が変更されたため、誤ったエントリがonItemClick()メソッドに登録されます。検索後に正しい項目を参照するにはどうすればよいですか?
以下は私の試みです。明らかに "position"パラメータへの参照が問題ですが、これを解決する解決策は考えられません。
public class ItemRelicFragment extends DialogFragment {
Button btn;
ListView lv;
SearchView sv;
String[] names={"Aegis Amulet", "Blink Rune", "Bracer of Undoing", "Cursed Ankh", "Hand of the Gods",
"Heavenly Wings", "Horrific Emblem", "Magic Shell", "Meditation Cloak", "Phantom Veil",
"Purification Beads", "Shield of Thorns", "Sundering Spear", "Teleport Glyph"};
int[] images={R.drawable.aegis_amulet, R.drawable.blink_rune, R.drawable.bracer_of_undoing, R.drawable.cursed_ankh, R.drawable.hand_of_the_gods,
R.drawable.heavenly_wings, R.drawable.horrific_emblem, R.drawable.magic_shell, R.drawable.meditation_cloak, R.drawable.phantom_veil,
R.drawable.purification_beads, R.drawable.shield_of_thorns, R.drawable.sundering_spear, R.drawable.teleport_glyph};
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myView=inflater.inflate(R.layout.item_list, null);
lv=(ListView) myView.findViewById(R.id.listView1);
sv=(SearchView) myView.findViewById(R.id.searchView1);
btn=(Button) myView.findViewById(R.id.dismiss);
//CREATE AND SET ADAPTER TO LISTVIEW
final Adapter adapter = new Adapter(getActivity(), this.getItems());
lv.setAdapter(adapter);
//SEARCH
sv.setQueryHint("Search relics..");
sv.setOnQueryTextListener(new OnQueryTextListener() {
public boolean onQueryTextSubmit(String txt) {
return false;
}
public boolean onQueryTextChange(String txt) {
adapter.getFilter().filter(txt);
return false;
}
});
//Listener for itemclick on list
lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
{
int image_id = images[position];
mListener.onListItemClick(image_id);
dismiss();
}
});
(...)
}
private ArrayList<Item> getItems() {
ArrayList<Item> items = new ArrayList<Item>();
Item item;
for(int i = 0; i < names.length; i++)
{
item = new Item(names[i], images[i]);
items.add(item);
}
return items;
}