web-dev-qa-db-fra.com

Android SearchView Liste de filtresVoir

J'ai implémenté le filtre de recherche dans SearchView dans la barre SherlockAction. 

Lorsque je tape m, je souhaite afficher les résultats filtrés dans la liste ci-dessous, qui ne commence que par M, etc. Mais maintenant, il montre des résultats aléatoires.

enter image description hereenter image description here

public boolean onQueryTextChange(String newText) {
    Log.i("Nomad", "onQueryTextChange");

    if (TextUtils.isEmpty(newText)) {
        adapter.getFilter().filter("");
        Log.i("Nomad", "onQueryTextChange Empty String");
        placesListView.clearTextFilter();
    } else {
        Log.i("Nomad", "onQueryTextChange " + newText.toString());
        adapter.getFilter().filter(newText.toString());
    }
    return true;
}

public boolean onQueryTextSubmit(String query) {
    Log.i("Nomad", "onQueryTextSubmit");
    return false;
}

public boolean onClose() {
    Log.i("Nomad", "onClose");
    return false;
}
20
Harsha M V

Placez ceci dans votre adaptateur:

@Override
public Filter getFilter(){
   return new Filter(){

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
             constraint = constraint.toString().toLowerCase();
             FilterResults result = new FilterResults();

                if (constraint != null && constraint.toString().length() > 0) {
                  List<String> founded = new ArrayList<String>();
                        for(YourListItemType item: origData){
                            if(item.toString().toLowerCase().contains(constraint)){
                                founded.add(item);
                            }
                    }

                        result.values = founded;
                        result.count = founded.size();
                    }else {
                        result.values = origData;
                        result.count = origData.size();
                    }
            return result;


    }
    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
           clear();
           for (String item : (List<String>) results.values) {
                 add(item);
           }
    notifyDataSetChanged();

    }

    }
    }

Et ce constructeur intérieur de votre adaptateur

public MyAdapter(Context context, int layoutResourceId, String[] places) {
        super(context, layoutResourceId, data);
        this.context = context;

        this.data = Arrays.asList(places);
        this.origData = new ArrayList<String>(this.data);

 }
21
Greensy

Obtenez le filtre de l'adaptateur et filtrez la chaîne modifiée dans le champ seachview de la requête modifiée.

searchView.setOnQueryTextListener(new OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            getListAdapter().getFilter().filter(newText);
            return true;
        }
    });
5
Ivor

Ajoutez l'élément dans listview_arr et restez le code est en dessous ...: -

    listview_arr = new String[listview_array_location.length];
    listview_arr = listview_array;

    setListAdapter(new bsAdapter(this));


    et.addTextChangedListener(new TextWatcher()
    {
        public void afterTextChanged(Editable s)
        {
              // Abstract Method of TextWatcher Interface.
        }
        public void beforeTextChanged(CharSequence s,
                int start, int count, int after)
        {
            // Abstract Method of TextWatcher Interface.
        }
        public void onTextChanged(CharSequence s,int start, int before, int count)
        {
            /*Log.d("count","count==>"+s.length());

                if(((s.length()-temp)%4)==0)
                {
                    Log.d("in if","if in if"+(s.length()-temp));
                    et.setText(et.getText().toString()+" ");
                    int position = et.getText().toString().length();
                    Editable etext = et.getText();
                    Selection.setSelection(etext, position);
                    temp++;
                }*/

            Log.d("count","count==>"+s);
            textlength = et.getText().length();
            array_sort.clear();
            for (int i = 0; i < listview_array_location.length; i++)
            {
                if (textlength <= listview_array_location[i].length())
                {
                    if(et.getText().toString().equalsIgnoreCase((String)listview_array_location[i].subSequence(0,textlength)))
                    {
                        array_sort.add(listview_array[i]);
                    }
                  }
            }
            AppendList(array_sort);
        }
    });
}

public void AppendList(ArrayList<String> str)
{
    listview_arr = new String[str.size()];
    listview_arr = str.toArray(listview_arr);

    setListAdapter(new bsAdapter(this));
}

public class bsAdapter extends BaseAdapter
{
    Activity cntx;
    public bsAdapter(Activity context)
    {
        // TODO Auto-generated constructor stub
        this.cntx=context;

    }

    public int getCount()
    {
        // TODO Auto-generated method stub
        return listview_arr.length;
    }

    public Object getItem(int position)
    {
        // TODO Auto-generated method stub
        return listview_arr[position];
    }

    public long getItemId(int position)
    {
        // TODO Auto-generated method stub
        return listview_array.length;
    }

    public View getView(final int position, View convertView, ViewGroup parent)
    {
        View row=null;

        LayoutInflater inflater=cntx.getLayoutInflater();
        row=inflater.inflate(R.layout.search_list_item, null);

        TextView tv=(TextView)row.findViewById(R.id.title);
        Button Btn01=(Button)row.findViewById(R.id.Btn01);
        Button Btn02=(Button)row.findViewById(R.id.Btn02);

        tv.setText(listview_arr[position]);

        Btn01.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                Toast.makeText(SearchUser.this, "Button 1 "+listview_arr[position], Toast.LENGTH_SHORT).show();
                  int color = PreferenceManager.getDefaultSharedPreferences(
                          SearchUser.this).getInt(COLOR_PREFERENCE_KEY, Color.WHITE);
                  new ColorPickerDialog(SearchUser.this, SearchUser.this, color).show();
            }
         });

        Btn02.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v) 
            {
                Toast.makeText(SearchUser.this, "Button 2 "+listview_arr[position], Toast.LENGTH_SHORT).show();
            }
         });

    return row;
    }
}
1
Mehul Ranpara

vous pouvez simplement passer par ce exemple . il est très facile d'intégrer dans votre application

Voici la logique avec tableau et addTextChangedListener pour EditText

0
Ram kiran