我正在使用AsyncTask类来搜索单词,所以我想在列表中显示单词"searching"执行过程时
好的,我想做的是在搜索完成之前有一个不可点击的列表,以便,如果单击搜索词,则没有任何反应......
哪种方法是正确的?多谢!
在加载、搜索和获取数据时,您可以在ListView
中显示页眉视图或/和页脚视图。只需在设置适配器之前添加这些视图即可。搜索字词时,请调用ListView
上的setClickable(false)
并启用页眉/页脚视图,例如,调用addFooterView(mFooterView)
以显示您的消息。
请注意,您必须在设置适配器之前添加视图。
例:
LayoutInflater inflater = getLayoutInflater();
mFooterView = inflater.inflate(R.layout.footer, null, false);
mListView.addFooterView(mFooterView);
mListView.setAdapter(mAdapter);
在此之后,请随时致电addFooterView()
以显示您的消息,并致电removeFooterView()
以隐藏您的消息。
任何直接的解决方案(必须有),但我这样做的方法是:
onPreExecute:
- 使列表视图
setEnabled(false)
,使其不可单击。 - 将自定义布局(包含搜索邮件)的可见性设置为
setVisibility(View.VISIBLE)
,以使其在 ListView 顶部可见。为此,您需要将列表视图和自定义布局组合在一个FrameLayout
.
onPostExecute:
- 只需在更改列表视图内容后反转该过程
通过这样做,您可以显示覆盖整个 ListView 的透明/半透明区域,并在该区域的顶部或中心显示一条消息。
我在我的一个项目中使用了这种方法,它看起来很不错:)
为什么不使用通知来显示查询正在执行?
因为它可以确保即使您转到其他应用程序,搜索也会继续。
您提出的问题意味着您的应用程序的用户等待很长时间才能搜索单词而不执行任何其他操作,这对于人类应用程序的设计是不可取
当您使用 AsyncTask
时,您可以在onPreExecute
方法中使用带有消息"searching"的ProgressDialog
,并在完成后将其关闭(在 onPostExecute
中)。
这样,您的列表视图也将被禁用。
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = ProgressDialog.show(mContext, message, "Please wait...");
mProgressDialog.setCancelable(false);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(mProgressDialog != null && mProgressDialog.isShowing())
mProgressDialog.dismiss();
// set data for listview
}