2017-03-25 1 views
0

anwenden Ich suchte nach einem SearchView in einem RecyclerView zu implementieren. Ich fand ein paar Antworten mit allen Datenbindungen und allem. Können wir das nicht einfacher machen? Ich entpacke meine Daten aus einer SQLite-Datenbank.Ich muss SearchView in einem RecyclerView in android

Mein Adater wird Adapter sein (Kontext Kontext, Liste Liste) und ich bekomme die ganze Liste meiner Daten Item in der Hauptaktivität aus der SQLite-Datenbank und dann den Adapter mit dieser Liste aufrufen.

Eine kurze, einfache Methode wäre nett.

EDIT:

ich diesen Ansatz versucht:

In meiner Adapterklasse:

public void filter(String text) { 
    Log.d("filter", items.toString()); 
    Log.d("filter", itemsCopy.toString()); 
    items.clear(); 
    Log.d("filter", itemsCopy.toString()); 
    if(text.isEmpty()) { 
     items.addAll(itemsCopy); 
    } else { 
     text = text.toLowerCase(); 
     for (Item item: itemsCopy) { 
      if(item.getTitleAdapter().toLowerCase().contains(text) || 
        item.getContentAdapter().toLowerCase().contains(text)){ 
       items.add(item); 
      } 
     } 
    } 
    notifyDataSetChanged(); 
} 

In MainActivity:

final MenuItem searchItem = menu.findItem(R.id.actionSearch); 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      adapter.filter(query); 
      return true; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      adapter.filter(newText); 
      return true; 
     } 
    }); 

Jetzt Das ist mein Log:

03-26 01:41:39.293 27775-27775/com.codedweeb.notesandmemo D/filter: [[email protected], [email protected], [email protected], [email protected], [email protected], [email protected]] 
03-26 01:41:39.293 27775-27775/com.codedweeb.notesandmemo D/filter: [[email protected], [email protected], [email protected], [email protected], [email protected], [email protected]] 
03-26 01:41:39.293 27775-27775/com.codedweeb.notesandmemo D/filter: [] 

Ich verstehe nicht, rief ich items.clear() dann warum die Kopie von Elementen, die itemsCopy wird auch gelöscht?

Hier ist die ganze Initialisierung:

public Adapter(Context context, List<Item> items) { 
    this.items = items; 
    this.itemsCopy = items; 
    this.layoutInflater = LayoutInflater.from(context); 
    this.context = context; 
} 
+0

Haben Sie versucht, einen Filter in Ihrem Adapter-Klasse zu implementieren? –

+0

ja ich habe einen Filter versucht, Warte, ich werde die Frage bearbeiten und hinzufügen, was ich getan habe. –

+0

Können Sie zeigen, wie Sie itemsCopy initialisieren? –

Antwort

0

Sie müssen nur this.itemsCopy = items ersetzen, mit

this.itemsCopy = new ArrayList(items); 
+0

und dann kopieren Sie alle Elemente meiner Liste "Elemente", bevor Sie es in der Filtermethode löschen. Vielen Dank :) –

Verwandte Themen