c# - 在我隐藏键盘之前,在 SearchView 上键入时 ListView 不会更新
问题描述
我正在创建一个连接到 Azure 搜索服务的 Android 应用。我添加了一个 SearchView 和一个 ListView。这个想法是,当我在 SearchView 上键入时,我会从 Azure Search 获得实时结果,并将它们作为常见功能显示在 ListView 上。
我遇到的问题是在显示 Android 键盘时 ListView 没有得到更新。所以最初 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) { }
}
提前致谢!
解决方案
推荐阅读
- android - Nexus 4 API 22 模拟器使用媒体播放器显示白屏
- azure-machine-learning-studio - 导入 html 文本时缺少分隔符错误
- go - 如何在 golang 中使用自签名证书设置 https 服务器
- ssh - 在没有 ssh 会话的服务器上运行应用程序
- angular - 如何遍历请求中的 HttpHeaders 并将任何缺失添加到新的标头变量中
- typescript - 从 typescript 模块导出所有类型(并且只是类型)
- android - Android apk 版本无法向下滑动屏幕
- php - 使用 Laravel 模型 HasMany() 和 BelongsTo 与多个产品相关的产品?
- python - 通过 python 脚本将声音输出到蓝牙或 USB 声卡
- c# - 通过反射动态修改 IEnumerable 属性