2017-10-20 155 views
0

我的列表视图中有超过2000个项目,无论按哪个项目,按下一个字母后,listView都会变成空白,就像if没有相关的项目。尝试使用SearchView过滤ListView。即使ListView中存在相关项目,也不会显示任何项目,即使ListView上存在相关项目。

我猜这是因为我使用Android Studio提供的simple_list_item_2布局。它有两个textView字段,这就是为什么过滤可能会搞砸。这只是我的猜测。

这里的适配器和ListView:

  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); 
       } 
      }); 

而这里的搜索查看:

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

【如何过滤与搜索查看一个RecyclerView(HTTPS的可能重复://计算器。 com/questions/30398247/how-to-filter-a-recyclerview-with-a-searchview) –

回答

1

如果您使用的是ContentProvider检索您的数据列表,然后在onQueryTextChange()下面一行将无法正常工作:

adapter.getFilter().filter(newText); 

如果您使用的是CursorLoader(与ContentProvider的),您必须使用LoaderManager回调过滤数据,而不是直接使用适配器。您需要更改onQueryTextChange()方法是这样的:

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; 
    } 

    ... 
} 

在这里看到一个例子:http://android-er.blogspot.co.uk/2013/02/query-contacts-database-using-loader.html

0

您可以实现Custumer模型的toString返回字符串你想与过滤。

的模型,你拥有的设备(在customers.get该reuturn(位置))

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

你可以选择吗? –