我需要在xamarin.forms的android导航栏中实现搜索栏,搜索时我发现很多ios的例子但不是android.How通过customrenderer实现这个问题吗?
答案 0 :(得分:1)
创建搜索的简便方法是创建类并利用过滤器选项 像这样
顶部的搜索栏按钮
<item android:id="@+id/action_search"
android:title="Search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always" />
您可能需要的课程
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(this);
return true;
}
//getting text from user
@Override
public boolean onQueryTextChange(String newText) {
activity.getFilter().filter(newText);
return false;
}
//submitting Text
@Override
public boolean onQueryTextSubmit(String newText) {
activity.getFilter().filter(newText);
return false;
}
这是其他活动
public Filter getFilter() {
return filter;
}
private Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Pokemon> to_be_filtered = new ArrayList<>();
String filterPattern = constraint.toString().toLowerCase().trim();
//implement search
if(filterPattern.isEmpty()) {
to_be_filtered.addAll(fulllist);
}
else {
for (some this iterate over ) {
if (get_name_of_required
search.getName().toLowerCase().contains(filterPattern)) {
add_created_database_to_be_filtered.add(name of list variable);
}
}
}
在这种情况下,您必须使用称为getfilter()的内置函数,它将处理搜索栏。 在这里,我使用过诸如to_be_filtered和add_created_database之类的语句,您必须根据所使用的数据库来修改代码。
我的情况是我有2个活动,其中前三个类,即OnQuerySearch ...,Submit text和Save text在MainActivity中,而getFilter()在另一个Activity中
谢谢,我希望你能得到答案