我使用了三个片段,其中每个片段显示来自服务器的数据列表。加载数据后,使用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);
}
}
答案 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来访问任何视图中的数据,而无需每次都请求。