2017-09-29 4 views
0

searchviewに問題があります。 たとえば、元のリストビューが次の場合: - Aa Ab Ac Ad。 しかし、検索バーで検索すると、たとえばbという検索結果が得られます。 しかし、アイテムをクリックすると、Position: - Aaの値が返されます。リストビューの検索はアイテムのクリックでは機能していません。戻り値元の商品の位置

はここに私のリストビューの活動である: - ここに

HashMap<String, String> userMap = Login.userMap; 
final ArrayList<String> userList = new ArrayList(userMap.keySet()); 
      listView = (ListView) findViewById(R.id.listView); 
      adapter = new ListAdapter(this, userMap); 
      listView.setAdapter(adapter); 
      listView.setTextFilterEnabled(true); 
      listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
        user = userList.get(position); 
        new GetDetails().execute(new Void[0]); 
       } 
      }); 

searchView.setMenuItem(item); 
     searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() { 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      public boolean onQueryTextChange(String newText) { 
       Log.i("newText", newText); 
       if (newText.isEmpty()) { 
        adapter.filter(""); 
        listView.clearTextFilter(); 
       } else { 
        adapter.filter(newText); 
       } 
       return true; 
      } 
     }); 

は私のアダプタである: -

class ListAdapter extends BaseAdapter { 
private static LayoutInflater inflater = null; 
private Activity activity; 
private HashMap<String, String> data; 
private List<String> username = new ArrayList(); 
private ArrayList<HashMap<String, Object>> list; 

public ListAdapter(Activity a, HashMap<String, String> d) { 
    this.activity = a; 
    this.data = d; 
    inflater = (LayoutInflater) this.activity.getSystemService("layout_inflater"); 
} 

public int getCount() { 
    return username.size(); 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return (long) position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    if (convertView == null) { 
     vi = inflater.inflate(R.layout.main_list_adapter, null); 
    } 
    ImageView image = (CircularImageView) vi.findViewById(R.id.img); 
    ((TextView) vi.findViewById(R.id.txt)).setText(username.get(position)); 
    Picasso.with(this.activity.getApplicationContext()).load(data.get(this.username.get(position))).placeholder(R.mipmap.empty_photo).resize(70, 70).into(image); 
    return vi; 
} 

public void filter(String charText) { 
    username.clear(); 
    if (charText.length() == 0) { 
     username.addAll(data.keySet()); 
    } else { 
     for (String s : data.keySet()) { 
      if (s.contains(charText)) { 
       username.add(s); 
      } 
     } 
    } 
    notifyDataSetChanged(); 
} 


public void refresh(HashMap<String, String> newData) { 
    data = newData; 
    username.clear(); 
    username.addAll(data.keySet()); 
    notifyDataSetChanged(); 
}} 

ヘルプは本当にみんなに理解されるであろう。私は周りを見ているが、私はそれを見つけることができません。

答えて

0

オーバーライド__getitem __()アダプタに

public Object getItem(int position) { 
    return username.get(position); 
} 

へとonclickのは、これは動作しますadapter.getItem(position);

を使用します。

+0

user = userList.get(position)を置き換えると、私はusernameの値を取得しています。 adapter.getItem(position);を使用します。 –

+0

ListAdapter関数getItemが更新されましたか? – steevoo

0

クリックして返される位置は、データリスト内の項目の位置に対応します。フィルター中にリストusernameを変更すると、リスト内の要素の位置が返されます。

関連する問題