gpt4 book ai didi

java - 尝试使用 SearchView 过滤 ListView。无论我输入哪个单词,都不会显示任何项目,即使 ListView 上存在相关项目

转载 作者:行者123 更新时间:2023-12-02 12:06:43 25 4
gpt4 key购买 nike

我的 ListView 上有超过 2,000 个项目,无论我搜索哪个项目,按下字母后, 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);
}
});

这是搜索 View :

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

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

最佳答案

如果您使用 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

关于java - 尝试使用 SearchView 过滤 ListView。无论我输入哪个单词,都不会显示任何项目,即使 ListView 上存在相关项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46858274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com