2016-03-25 9 views
1

Ich habe eine ListView. Ich möchte in Listview von arrayAdapter suchen. Android textwatcher hat mir in diesem Thema geholfen. Aber es sucht nur eins zu eins Kopplung. Zum Beispiel: Ich tippe "ger" um Deutschland zu suchen. Es listet nur "Deutschland" auf, aber meine Liste enthält auch Algerien und Nigeria. Also, wie kann ich mit gleichem %% Befehl als SQL im Adapter suchen?Android TextWatcher Suche mit SQL wie %%?

public ArrayAdapter<?> adapter; 
    @Override 
      public Dialog onCreateDialog(Bundle savedInstanceState) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
       builder.setTitle(title); 

       LayoutInflater inflater = LayoutInflater.from(getActivity()); 
       View dialogLayout = null; 

       if (adapter != null) { 
        dialogLayout = inflater.inflate(R.layout.layout_dialog_list_filter, null); 

        filterText = (EditText) dialogLayout.findViewById(R.id.search_box); 
        filterText.addTextChangedListener(filterTextWatcher); 

        ListView listView = (ListView) dialogLayout.findViewById(R.id.dialogListView); 
        listView.setAdapter(adapter); 
        listView.setOnItemClickListener(listItemClickListener); 
        listView.setTextFilterEnabled(true); 
       } 

       builder.setNegativeButton(R.string.text_cancel, this); 
       builder.setView(dialogLayout); 

       return builder.create(); 
      } 

      private TextWatcher filterTextWatcher = new TextWatcher() { 

       @Override 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 

       } 

       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

       } 

       @Override 
       public void afterTextChanged(Editable s) { 
        adapter.getFilter().filter(s); 
       } 


      }; 

Antwort

0

Sie können dasselbe erreichen, indem Sie nur Ihre Filterlogik ändern.

Während Ihr Vergleich, statt mit startWith() verwenden enthält() in Ihrer Filterlogik, in Adapter, wird es Liste zurück, deren Name "ger".

So etwas ...

String aa= ""; 
String bb = ""; 
aa.contains(bb); 

Filter Objekt mit allen erforderlichen Implementierungen erstellen und mit Ihrer Logik.

Filter customFilter = new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
     } 
     @Override 
     protected void publishResults(CharSequence contraint, FilterResults results) { 
     } 
} 

Dann außer Kraft setzen, Filtermethode Ihres Adapters und customfilter Objekt zurück.

@Override 
public Filter getFilter() { 
    return customFilter; 
} 

zu dieser Lösung finden Sie mehr zu wissen ...

Custom getFilter in custom ArrayAdapter in android

+0

ja, haben Sie versucht das? – Ritesh

+1

ohh .. Entschuldigung mein Fehler, es wäre contains() statt containsWith(). – Ritesh

+0

Wie und wo soll ich verwenden? Ich verwende ArrayAdapter. – hkaraoglu