我正在使用 AsyncTask 类来搜索一个词,所以我想在执行过程时在列表中出现“搜索”这个词
好的,我想要做的是在搜索完成之前有一个不可点击的列表,为了,如果点击搜索词没有任何反应......
执行此操作的正确方法是什么?非常感谢!
在加载、搜索和获取数据时,您可以在ListView
. 只需在设置适配器之前添加这些视图。当您搜索一个单词时,调用setClickable(false)
并ListView
启用您的页眉/页脚视图,例如,调用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顶部可见。为此,您需要将ListView和自定义布局组合在FrameLayout
.onPostExecute:
通过这种方式,您可以显示覆盖整个ListView的透明/半透明区域,并在其顶部或中心显示一条消息。
我在我的一个项目中使用了这种方法,它看起来非常好:)
当您使用AsyncTask
时,您可以ProgressDialog
在方法中使用带有“搜索”消息的 aonPreExecute
并在完成后将其关闭(在 中onPostExecute
)。
这样,您的 ListView 也将被禁用。
@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
}
为什么不使用通知来显示查询正在执行?
因为即使您使用其他应用程序,它也可以确保搜索继续进行。
您提出的问题意味着您的应用程序的用户等待很长时间来搜索一个单词而什么都不做,这对于人类应用程序的设计来说是不可取的