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();
        }

    }