ListView не обновляется при наборе в SearchView, пока я не спрятал клавиатуру - PullRequest
0 голосов
/ 27 июня 2018

Я создаю приложение для Android, которое подключается к службе поиска Azure. Я добавил SearchView и ListView. Идея состоит в том, что, когда я печатаю в SearchView, я получаю живые результаты из поиска Azure и отображаю их в ListView, как обычную функциональность.

Проблема в том, что ListView не обновляется, пока отображается клавиатура Android. Итак, изначально ListView пуст, я набираю пару букв в SearchView, в ListView ничего не появляется, но если я коснусь кнопки возврата Android (на данный момент кнопка вниз), чтобы скрыть клавиатуру Android, то заполнится ListView и появляются результаты поиска.

Если я наберу 3, 4 или более букв, я вижу правильные результаты, но только когда я прячу клавиатуру.

Это в основном мой код:

private SearchView searchView;
private ListView listView;
private ArrayAdapter<string> adapter;

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    SetContentView(Resource.Layout.activity_main);

    searchView = FindViewById<SearchView>(Resource.Id.searchBox);
    listView = FindViewById<ListView>(Resource.Id.searchResult);

    adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1);
    listView.Adapter = adapter;

    searchView.QueryTextChange += SearchView_QueryTextChange;
}

private void SearchView_QueryTextChange(object sender, SearchView.QueryTextChangeEventArgs e)
{
    adapter.Clear();
    if (e.NewText.Length > 1)
    {
        searchTerm(e.NewText);
    }
}

private async void searchTerm(string newText)
{
    var client = new RestClient("mysearchengine.search.windows.net");
    var request = new RestRequest("indexes/myitems/docs/search", Method.POST);

    request.AddParameter("api-version", "2017-11-11", ParameterType.QueryString);
    request.AddHeader("api-key", "MYKEY");
    request.AddHeader("content-type", "application/json");
    request.RequestFormat = DataFormat.Json;
    request.AddBody(new { search = newText + "*", select = "id, title" });

    try {
        await Task.Run(() => {
        IRestResponse response = client.Execute(request);
        if (response.StatusDescription == "OK")
        {
            string values = response.Content;
            List<MyPost> myPosts = JsonConvert.DeserializeObject<List<MyPost>>(values);
            List<string> items = new List<string>();
            for(int i=0;i<myPosts.Count;i++)
            {
                items.Add(myPosts[i].Title + " (" + myPosts[i].ID + ")");
            }
            adapter.AddAll(items);
            adapter.NotifyDataSetChanged();
        }
    });
}
    catch(Exception e) { }
}

Заранее спасибо!

...