2017-10-20 1 views
0

Es gibt mehr als 2.000 Elemente in meiner Listenansicht und egal nach welchem ​​Element ich suche, nach dem Drücken eines Buchstabens wird listView leer, als ob Es gab keine relevanten Punkte.Der Versuch, ein ListView mit einem SearchView zu filtern. Es werden keine Elemente angezeigt, egal welches Wort ich eintrage, selbst wenn relevante Elemente in der ListView vorhanden sind.

Ich rate es ist, weil ich das simple_list_item_2 Layout verwende, das von Android Studio zur Verfügung gestellt wird. Es hat zwei textView Felder und deshalb kann die Filterung durcheinander geraten. Es ist nur eine Vermutung von mir.

Hier ist der Adapter und Listenansicht:

  adapter = new ArrayAdapter(ViewExistingCustomersActivity.this, android.R.layout.simple_list_item_2, android.R.id.text1, customers) { 
       @Override 
       public View getView(int position, View convertView, ViewGroup parent) { 
        View view = super.getView(position, convertView, parent); 
        TextView text1 = (TextView) view.findViewById(android.R.id.text1); 
        TextView text2 = (TextView) view.findViewById(android.R.id.text2); 

        text1.setText(customers.get(position).getDefinition()); 
        text2.setText(customers.get(position).getAddress1() + " Bakiye: " + customers.get(position).getBalance()); 
        return view; 
       } 
      }; 

customersListView.setAdapter(adapter); 

      // Dokunulan ListView elemanının detaylarını gösterecek ekranı çağıran kod. 
      customersListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
        Intent viewCustomerDetailsIntent = new Intent(ViewExistingCustomersActivity.this, CurrentStatementActivity.class); 
        viewCustomerDetailsIntent.putExtra("customer", customers.get(i)); 
        viewCustomerDetailsIntent.putExtra("user", user); 
        startActivity(viewCustomerDetailsIntent); 
       } 
      }); 

Und hier ist der Suche:

customersSearchView.setOnQueryTextListener(new OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       adapter.getFilter().filter(newText); 
       return false; 
      } 
     }); 
+2

Mögliches Duplikat [Wie ein RecyclerView mit einem Search filtern] (https: // Stackoverflow. com/questions/30398247/how-to-Filter-ein-recyclerview-with-a-searchview) –

Antwort

1

Wenn Sie eine ContentProvider verwenden Ihre Daten Liste abzurufen, dann die folgende Zeile in onQueryTextChange() nicht funktionieren :

adapter.getFilter().filter(newText); 

Wenn Sie eine CursorLoader (mit dem Contentprovider) verwenden, müssen Sie die Daten mit Hilfe der LoaderManager Rückrufe filtern, den Adapter nicht direkt verwenden. Sie müßten Ihre onQueryTextChange() Methode, um so etwas zu ändern:

private String cursorFilter; 

@Override 
public boolean onQueryTextChange(String newText) { 
    cursorFilter = !TextUtils.isEmpty(newText) ? newText : null; 
    getLoaderManager().restartLoader(0, null, this); 
    return true; 
} 

@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
    Uri baseUri; 
    if (cursorFilter != null) { 
     // Filter the data with the cursorFilter 
     baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, 
             Uri.encode(cursorFilter)); 
    } else { 
     baseUri = MyContentProvider.CONTENT_URI; 
    } 

    ... 
} 

Siehe Beispiel hier: http://android-er.blogspot.co.uk/2013/02/query-contacts-database-using-loader.html

0

Sie die toString Custumer Modell implementieren kann mit der Zeichenfolge, die Sie wollen, zu filtern, um zurückzukehren.

das Modell, das Sie haben (die an diesem reuturn in customers.get (Position))

public class Custumer { 
    //The rest as is 
    @Override public String toString() { 
     return getDefinition(); 
    } 
} 
+0

können Sie elaborate? –

Verwandte Themen