如何在FirebaserecycleriewAdapter上用oncreatmoptions菜单实现搜索视图



我知道我们必须执行orderbyChild(_(并启动At和End At,但我正在将选项传递给适配器,弄不清楚如何在我的项目中使用此查询

以下是选项

savedInstanceState: Bundle?): View? {
val view : View = inflater.inflate(R.layout.randomeinfo, container, false)
rc_listing  = view.rc_list
rc_listing.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL , false)
var options : FirebaseRecyclerOptions<Data?> = FirebaseRecyclerOptions.Builder<Data>()
.setQuery(db, Data::class.java)
.build()
mAdapter = Rand_Adapter(options)
rc_listing.adapter = mAdapter
return view

它将进入我的适配器,在我使用的同一个片段中,创建菜单

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.mainmenu, menu)
val searchItem = menu.findItem(R.id.actionsearch)
val searchView = searchItem.actionView as androidx.appcompat.widget.SearchView
searchView.imeOptions = EditorInfo.IME_ACTION_DONE
searchView.setOnQueryTextListener(object : androidx.appcompat.widget.SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
override fun onQueryTextChange(newText: String): Boolean {
//here what shall i pass 

return false
}
})
}

这是否意味着我必须再创建一个数组列表?我真的很困惑,在互联网上我找到了一个名为Elasticsearch的解决方案,但我不认为这是唯一的选择。

query listener设置为SearchView后,获取查询并执行filter搜索,以显示必须向用户显示的任何数据。您可以在另一个活动中显示和筛选结果,或者在活动为空时显示一个结果。如果我们假设在另一个活动中执行此操作,则执行查询并处理意图,如下所示。

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
handleIntent(query);
return true;
}
@Override
public boolean onQueryTextChange(String query) {
return false;
}
});
private void handleIntent(String query) {
Intent intent = new Intent(MainActivity.this, SearchActivity.class);
intent.putExtra(SearchActivity.INTENT_EXTRA_QUERY_STRING, query);
startActivity(intent);
}

在搜索活动中:

public static final String INTENT_EXTRA_QUERY_STRING = "SEARCH_QUERY";

从我们在onCreate()中收到的意向中获取查询

String result = getIntent().getStringExtra(INTENT_EXTRA_QUERY_STRING);
// Create new function
performFilter(query)

现在您有了查询和创建操作或任务来过滤数据并生成新列表。

示例:

List<String> filteredList = new ArrayList<>();
private void performFilter(String result) {
String[] stringList = {"One", "Two", "Three"};
for (String currentItem : stringList) {
if (currentItem.toLowerCase().trim().contains(result)) {
filteredList.add(currentItem);
}
}
}

这可能不完全符合您的情况,因此请作为参考。

相关内容

  • 没有找到相关文章

最新更新