Android 在不暂停片段中的活动的情况下加载数据

Android 在不暂停片段中的活动的情况下加载数据,android,android-fragments,progressdialog,Android,Android Fragments,Progressdialog,我有一个扩展查看寻呼机的应用程序。查看页面的每一个选项卡都会从在线数据库中填充,但我在加载时遇到了一个小问题:-) 我在活动第一次启动时使用Asynctask,但这会破坏用户体验,因为我希望它更流畅、更具交互性。 因此,在看了最新更新的zedge应用程序之后,我想对我的片段做完全相同的事情 这张图片解释了一切: 他们的装载是平稳的,我也希望我的装载是平稳的,那么我该怎么做呢 基本上:我希望进度对话框位于片段内部,并在加载完成后消失。我知道我们知道可以通过修改可见性来实现这一点,但如何在用户仍可

我有一个扩展查看寻呼机的应用程序。查看页面的每一个选项卡都会从在线数据库中填充,但我在加载时遇到了一个小问题:-)

我在活动第一次启动时使用Asynctask,但这会破坏用户体验,因为我希望它更流畅、更具交互性。 因此,在看了最新更新的zedge应用程序之后,我想对我的片段做完全相同的事情

这张图片解释了一切:

他们的装载是平稳的,我也希望我的装载是平稳的,那么我该怎么做呢


基本上:我希望进度对话框位于片段内部,并在加载完成后消失。我知道我们知道可以通过修改可见性来实现这一点,但如何在用户仍可以在选项卡之间滑动的情况下将数据从联机数据库加载到脱机数据库。

这应该是您想要的

class AsyncGet extends AsyncTask<Void,Void,Void>
        {

        private ProgressDialog progressDialog = new ProgressDialog(getSherlockActivity());

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            progressDialog.setMessage("Getting Information...");
            progressDialog.show();
            progressDialog.setOnCancelListener(new OnCancelListener() {
        @Override
            public void onCancel(DialogInterface arg0) {
            AsyncGet.this.cancel(true);
        }
           });

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // TODO Auto-generated method stub
            //your stuff here
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
progressDialog.dismiss();
//Update UI
}
}
类AsyncGet扩展了AsyncTask
{
private ProgressDialog ProgressDialog=新建ProgressDialog(getSherlockActivity());
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
progressDialog.setMessage(“获取信息…”);
progressDialog.show();
progressDialog.setOnCancelListener(新的OnCancelListener(){
@凌驾
public void onCancel(对话框接口arg0){
AsyncGet.this.cancel(true);
}
});
}
@凌驾
受保护的Void doInBackground(Void…arg0){
//TODO自动生成的方法存根
//你的东西在这里
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
progressDialog.disclose();
//更新用户界面
}
}

这应该是你想要的

class AsyncGet extends AsyncTask<Void,Void,Void>
        {

        private ProgressDialog progressDialog = new ProgressDialog(getSherlockActivity());

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            progressDialog.setMessage("Getting Information...");
            progressDialog.show();
            progressDialog.setOnCancelListener(new OnCancelListener() {
        @Override
            public void onCancel(DialogInterface arg0) {
            AsyncGet.this.cancel(true);
        }
           });

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // TODO Auto-generated method stub
            //your stuff here
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
progressDialog.dismiss();
//Update UI
}
}
类AsyncGet扩展了AsyncTask
{
private ProgressDialog ProgressDialog=新建ProgressDialog(getSherlockActivity());
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
progressDialog.setMessage(“获取信息…”);
progressDialog.show();
progressDialog.setOnCancelListener(新的OnCancelListener(){
@凌驾
public void onCancel(对话框接口arg0){
AsyncGet.this.cancel(true);
}
});
}
@凌驾
受保护的Void doInBackground(Void…arg0){
//TODO自动生成的方法存根
//你的东西在这里
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
progressDialog.disclose();
//更新用户界面
}
}
在xml文件中尝试此操作

 <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:orientation="horizontal"
        android:visibility="visible" >

        <ProgressBar
            android:id="@+id/loading_time_progress_bar"
            android:layout_width="20dip"
            android:layout_height="20dip"
            android:layout_gravity="center_vertical" />
    </LinearLayout>

在xml文件中尝试此操作

 <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:orientation="horizontal"
        android:visibility="visible" >

        <ProgressBar
            android:id="@+id/loading_time_progress_bar"
            android:layout_width="20dip"
            android:layout_height="20dip"
            android:layout_gravity="center_vertical" />
    </LinearLayout>

您可以通过在每个片段布局中添加一个进度条来实现这一点。使此进度条“可见””和所有其他布局“消失”,直到加载UI的所有数据。为每个片段执行此操作。数据加载完成后,使您的UI可见。这样,它不会停止导航,因为它不是进度对话框,而是布局中的进度条


希望它能有所帮助。

您可以通过在每个片段布局中添加进度条来实现这一点。使此进度条“可见””和所有其他布局“消失”,直到加载UI的所有数据。为每个片段执行此操作。数据加载完成后,使您的UI可见。这样,它不会停止导航,因为它不是进度对话框,而是布局中的进度条


希望能有所帮助。

你说的“它破坏用户体验”是什么意思?你说的平滑是什么意思?我的意思是我希望加载在片段中,就像屏幕截图中的对话框一样,但我不希望加载暂停活动,因为用户可以在加载时在选项卡之间滑动你说的“它破坏了用户体验”是什么意思?你说的平滑是什么意思?我的意思是,我希望加载在片段内部,就像屏幕截图中的对话框一样,但我不希望加载暂停活动,因为用户可以在加载时在选项卡之间滑动。我在片段内部这样做吗??我不希望“进度”对话框显示消息,也不希望它是一个对话框,只是一个转轮。是的,在片段中这样做会起作用……对于转轮,您可以使其显示在onPreExecute()中。首先在布局中为父视图提供一个id。将其可见性设置为“已消失”。并通过编程方式和在onPostExecute()中引入控制盘,使其可见获取数据后,使控制盘不可见,并将父布局的可见性更改为可见。要预加载内容,我想您可以启动一个intent服务,将数据从webservice预加载到SQLite db,它将在后台完成所有工作。然后,每当用户滑动到相应的选项卡时,从中读取!我是在碎片里面做的吗??我不希望“进度”对话框显示消息,也不希望它是一个对话框,只是一个转轮。是的,在片段中这样做会起作用……对于转轮,您可以使其显示在onPreExecute()中。首先在布局中为父视图提供一个id。将其可见性设置为“已消失”。获取数据后,通过编程和onPostExecute()中的引入使控制盘可见使控制盘不可见并将父布局的可见性更改为可见。要预加载内容,我想您可以启动一个intent服务从webserv预加载数据