Android:如何解决点击TabWidget后响应慢的问题
我的应用程序顶部有四个选项卡Android:如何解决点击TabWidget后响应慢的问题,android,Android,我的应用程序顶部有四个选项卡 第四个选项卡的内容是,它将从sql server获取数据,然后显示在listview中 由于检索到的数据量相当大,需要2-3秒 问题在于: 单击第四个选项卡后,它没有响应,然后在2-3秒后,它显示内容 因为我知道它正在从数据库加载数据,所以我不会继续单击 但是,当用户单击它而没有响应时,他可能会不断单击并单击 如何向用户显示某些内容,以便他们知道它正在加载数据???您应该使用。这将显示一个加载循环,同时仍使UI处于活动状态。请注意,即使您使用的是较低版本的andro
第四个选项卡的内容是,它将从sql server获取数据,然后显示在listview中
由于检索到的数据量相当大,需要2-3秒
问题在于:
单击第四个选项卡后,它没有响应,然后在2-3秒后,它显示内容
因为我知道它正在从数据库加载数据,所以我不会继续单击
但是,当用户单击它而没有响应时,他可能会不断单击并单击
如何向用户显示某些内容,以便他们知道它正在加载数据???您应该使用。这将显示一个加载循环,同时仍使UI处于活动状态。请注意,即使您使用的是较低版本的android API,也可以通过访问访问CursorLoader类。如需有关签出的详细信息,请在启动长时间运行的进程时指示正在发生什么,以便用户知道等待。您需要一个进度对话框 以下是一个例子: 新建SomeTask(0)。执行();//在第四个选项卡onCreate()中写这行
/**用于在获取数据之前实现进度条的内部类**/
私有类SomeTask扩展了AsyncTask
{
private ProgressDialog=新建ProgressDialog(yourActivityClass.this);
@凌驾
受保护的void onPreExecute()
{
setMessage(“加载…”);
Dialog.show();
}
@凌驾
受保护的整数doInBackground(Void…params)
{
//做某事的任务
//从sql server获取数据,然后在listview中显示
返回0;
}
@凌驾
受保护的void onPostExecute(整数结果)
{
如果(结果==0)
{
//如果您的列表已完成,请执行一些操作
}
//完成进度条后
Dialog.dismise();
}
}
使用进度对话框加载。。。。要显示对话框应该放在哪里??需要一个新的线程吗?你能检查一下我写的下面的答案吗。如果您无法修复,请告诉我。我应该在哪里使用光标加载器?在main.java中,我的代码是在哪里使用光标加载器?在main.java中,我的代码是tabHost.addTab(tabHost.newTabSpec(“tab4”).setIndicator(“,getResources().getDrawable(R.drawable.compass)).setContent(新意图(这个,map_activity.class));我应该在哪里使用光标或对话框?请查看我上面发布的示例,了解如何使用光标加载程序。名称,请看:对于这样一个简单的需求,异步任务有点复杂。在这种情况下最好使用加载器。thx Padma和Kurtis,我正在尝试你的两种方法。。完成后报告@你试过的方法。如果你用的是破碎机,你能把代码发给我吗。
/** Inner class for implementing progress bar before fetching data **/
private class SomeTask extends AsyncTask<Void, Void, Integer>
{
private ProgressDialog Dialog = new ProgressDialog(yourActivityClass.this);
@Override
protected void onPreExecute()
{
Dialog.setMessage("loading...");
Dialog.show();
}
@Override
protected Integer doInBackground(Void... params)
{
//Task for doing something
// get data from sql server and then display in listview
return 0;
}
@Override
protected void onPostExecute(Integer result)
{
if(result==0)
{
//do some thing if your list completed
}
// after completed finished the progressbar
Dialog.dismiss();
}
}