如何在Xamarin Studio-Android中使用SearchView筛选列表视图

如何在Xamarin Studio-Android中使用SearchView筛选列表视图,android,xamarin.android,Android,Xamarin.android,首先让我澄清一下这个问题,我不是在找人为我编写代码的人。我在寻找指引我走向正确方向的东西 关于Xamarin Studio中的搜索视图,我有一个小问题。我制作了一个小应用程序,它使用HttpClient从服务器检索数据。我收到的数据放在我制作的自定义适配器中。适配器用于将数据放入listview中 现在我的问题。我想使用SearchView,以便用户可以在listview中搜索特定项目。但我发现的唯一例子是在actionbar中使用searchview。我不使用actionbar 所以我的问题是

首先让我澄清一下这个问题,我不是在找人为我编写代码的人。我在寻找指引我走向正确方向的东西

关于Xamarin Studio中的
搜索视图
,我有一个小问题。我制作了一个小应用程序,它使用
HttpClient
从服务器检索数据。我收到的数据放在我制作的自定义适配器中。适配器用于将数据放入listview中

现在我的问题。我想使用SearchView,以便用户可以在listview中搜索特定项目。但我发现的唯一例子是在actionbar中使用searchview。我不使用actionbar

所以我的问题是: 如何使用searchview而不将其放在操作栏中,以及如何过滤listview。 有人能告诉我/告诉我如何解决这个问题吗,或者我应该开始


提前感谢。

使用简单的Linq查询来搜索不带(IFilterable)的自定义列表视图 最简单的可能对你有帮助。。 `

公共类yourActivity:Activity,SearchView.IOnQueryTextListener
{
ListView你的ListView;
List yourListViewItems=新建列表(){
新的CustomListView\u Item\u class{CustomListView\u Item\u class.object1=“item1”,CustomListView\u Item\u class.object2=“item2”},
};
搜索视图您的搜索视图;
yourCustomListViewAdapter名称yourCustomListViewAdapter;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
//在此处创建应用程序
SetContentView(Resource.Layout.Main);
yourListView=findviewbyd(Resource.Id.yourListView);
yourSearchView=FindViewById(Resource.Id.yourSearchView);
yourCustomListViewAdapter=新建yourCustomListViewAdapterName(这是yourListViewItems);
适配器=适配器;
yourListView.TextFilterEnabled=false;
setupSearchView();
}
私有void setupSearchView()
{
yourSearchView.SetIconifiedByDefault(false);
yourSearchView.SetOnQueryTextListener(这个);
yourSearchView.SubmitButtoneEnabled=true;
yourSearchView.SetQueryHint(“搜索”);
}
公共bool OnQueryTextChange(字符串newText)
{
尝试
{
if(TextUtils.IsEmpty(newText))
{
yourListView.ClearTextFilter();
yourCustomListViewAdapter=新建yourCustomListViewAdapterName(这是yourListViewItems);
适配器=适配器;
}
其他的
{
QuesAnsList.ClearTextFilter();
列出您的ListViewItems 2=(来自ListViewItems中的i
其中i.object1.ToLower()包含(newText.ToLower())
选择i.ToList();
yourCustomListViewAdapter=新建yourCustomListViewAdapterName(这是yourListViewItems2);
适配器=适配器;
}
}
捕获(例外情况除外)
{
Toast.MakeText(this,ex.Message.ToString(),ToastLength.Long).Show();
}
返回true;
}
公共bool onquerytexsubmit(字符串查询)
{
返回false;
}
}`

我也一直在寻找一个清晰的教程,但找不到不使用actionbar的1。有用的是使用特定的教程,然后看看如何从代码中删除actionbar。我找不到解决办法。我发现了这个:但就像我说的,它使用了一个actionbar。也许有人可以告诉我们如何在没有ActionBar的情况下使用它。这也可能是一个解决方案。除了使用
ActionBar
使用
ISearchView
进行过滤外,您还可以在
ListView
中添加一个标题,其中包含一个
EditText
字段来过滤搜索。类似于这样的东西。但仅供参考,由于3.0在
ActionBar
中使用
SearchView
是android中搜索的首选方式。
public class yourActivity : Activity, SearchView.IOnQueryTextListener
{

    ListView yourListView;
    List<CustomListView_Item_class> yourListViewItems= new List<CustomListView_Item_class>() {
            new CustomListView_Item_class{ CustomListView_Item_class.object1= "item1", CustomListView_Item_class.object2= "item2"},
        };
    SearchView yourSearchView;
    yourCustomListViewAdapterName yourCustomListViewAdapter;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your application here
        SetContentView(Resource.Layout.Main);


        yourListView= FindViewById<ListView>(Resource.Id.yourListView);
        yourSearchView= FindViewById<SearchView>(Resource.Id.yourSearchView);

        yourCustomListViewAdapter= new yourCustomListViewAdapterName (this, yourListViewItems);
        yourListView.Adapter = adapter;
        yourListView.TextFilterEnabled = false;
        setupSearchView();

    }

    private void setupSearchView()
    {
        yourSearchView.SetIconifiedByDefault(false);
        yourSearchView.SetOnQueryTextListener(this);
        yourSearchView.SubmitButtonEnabled = true;
        yourSearchView.SetQueryHint("Search");
    }

    public bool OnQueryTextChange(string newText)
    {
        try
        {
            if (TextUtils.IsEmpty(newText))
            {
                yourListView.ClearTextFilter();
                yourCustomListViewAdapter= new yourCustomListViewAdapterName (this, yourListViewItems);
                yourListView.Adapter = adapter;
            }
            else
            {

                QuesAnsList.ClearTextFilter();
                List<CustomListView_Item_class> yourListViewItems2= (from i in yourListViewItems
                                         where i.object1.ToLower().Contains(newText.ToLower())
                                         select i).ToList();
                yourCustomListViewAdapter= new yourCustomListViewAdapterName (this, yourListViewItems2);
                yourListView.Adapter = adapter;
            }
        }
        catch (Exception ex)
        {
            Toast.MakeText(this, ex.Message.ToString(), ToastLength.Long).Show();
        }
        return true;
    }

    public bool OnQueryTextSubmit(string query)
    {
        return false;
    }
}`