进度对话框不断出现在碎片上

时间:2015-10-28 09:57:58

标签: android

我使用了三个片段,其中每个片段显示来自服务器的数据列表。加载数据后,使用SQLite存储数据。但是,即使在加载和存储数据之后,进程对话框也会在从片段切换到片段时继续进行。我希望在加载数据后没有进度对话但是它不断出现,因此对于用户体验来说可能不是一个好习惯。

 @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        ButterKnife.inject(this, view);

        dialog = new ProgressDialog(getActivity());
        dialog.setMessage("Collecting Data...");
        dialog.setCancelable(false);
        dialog.show();


        getListfromServer();


    }
     public void getListfromServer(){

        if(Util.isNetworkConnected(getActivity())){

        new GetListTask().execute(Util.listingUrl);

        }else{

            if(dialog.isShowing()){
                dialog.dismiss();
            }

        }
    }

    @Subscribe
    public void GetResultEvent(GetEvent event){

        if (event != null){
            models = event.getModelList();

            setUpView(models);

        }else{
            Util.showToastMessage(getActivity(), "Error", Toast.LENGTH_SHORT);
        }
    }

2 个答案:

答案 0 :(得分:0)

您的GetListTask展开AsyncTask。在onPreExecute()方法中添加以下内容:

dialog = new ProgressDialog(getActivity());
    dialog.setMessage("Collecting Data...");
    dialog.setCancelable(false);
    dialog.show();

并在onPostExecute()方法中添加以下内容:

 if(dialog.isShowing()){
            dialog.dismiss();
 }

答案 1 :(得分:0)

您正在onViewCreated()方法中创建ProgressBar。您可能总是启动新片段来显示它们中的任何一个,这将创建片段的新实例,然后将出现ProgressBar。检查如何打开碎片。此外,您应该在开头创建新进度,而不是那样,检查您是否已加载数据,然后查看是否要加载。例如

if(loadingData)
{
   dialog = new ProgressDialog(getActivity());
   dialog.setMessage("Collecting Data...");
   dialog.setCancelable(false);
   dialog.show();
}

修改AsyncTask中,您可以使用方法onProgressUpdat()来报告仍有加载,一旦您的AsyncTask完成,您就可以隐藏加载。您也可以(如果需要)创建AsyncTask的singleToon并使用该实例singleToon来访问任何视图中的数据,而无需每次都请求。