2017-03-10 9 views
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; 

    } 

答えて

0

私はこの問題を最終的に解決しました!

私のonItemClick(...)メソッドのmy image_id変数は、私が選択したアイテムではなく、物理的にタップした位置を指していました。ここで

は、私はアイテムを参照する方法である:

public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) 
      { 
       int image_id = adapter.getItem(position).getImage(); 
       mListener.onListItemClick(image_id); 
       dismiss(); 
      } 
関連する問題