2017-01-03 99 views
0

我要么后navigation startroute shown后按Back Button显示ProgressDialog后返回按钮按下

我的工作FragmentView按顺序排列如下:Fragment中的A-B-C-D。并且,Back Press工作流程如下:B:A,C:B:A,D:C:B:A。

但是,我想在每个back press之后使用progress bar,然后显示我在back press之后来到的屏幕。

我在onBackPress方法中使用以下代码:

public boolean onBackPressed() { 
    if (hasNavigationStarted) { 
     AlertDialog.Builder alert = new AlertDialog.Builder(HomeFragment.this.getActivity()); 
     alert.setTitle("Really quit?"); 
     alert.setMessage("Do you want to exit navigation?"); 
     alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int id) { 
       isDrivingModeOn = false; 
       navigationManager.stopNavigation(); 
       corLDriveInfoContainer.setVisibility(View.VISIBLE); 
       mapView.clearAllOverlays(); 

       progressBar = new ProgressDialog(getActivity()); 
       progressBar.setMessage("Loading ..."); 
       progressBar.show(); 
       progressBar.setCancelable(false); 
       if (isDrivingDirectionsOn) { 
        showDriveInfoForDrivingDirection(); 
        rlDrivingDirections.setVisibility(View.VISIBLE); 
        ((ToolbarActivity) getActivity()).getSupportActionBar().setTitle(R.string.app_name); 
        if (drivingDirectionDestPoint != null) { 
         mapView.deleteAllAnnotationsAndCustomPOIs(); 
         addAnnotation(drivingDirectionDestPoint); 
         mapView.centerMapOnPosition(new SKCoordinate(drivingDirectionDestPoint.getLongitude(), drivingDirectionDestPoint.getLatitude())); 
        } 
        if (drivingDirectionStartPoint != null) { 
         mapView.deleteAllAnnotationsAndCustomPOIs(); 
         addAnnotation(drivingDirectionStartPoint); 
        } 
       } else if (latestDriveInfoPlace != null) { 
        setSearchViewShown(true); 
        addAnnotation(latestDriveInfoPlace); 
        mapView.setZoom(MapUtils.DEFAULT_ZOOM_VALUE); 
        mapView.centerMapOnPosition(new SKCoordinate(latestDriveInfoPlace.getLongitude(), latestDriveInfoPlace.getLatitude())); 
        searchItem.expandActionView(); 
        searchView.setQuery(latestDriveInfoPlace.getName(), false); 
        searchView.clearFocus(); 
       } 
      } 
     }); 
     alert.setNegativeButton("Cancel", null); 
     alert.show(); 
     return true; 
    } else if (isRouteShown) { 
     isDrivingModeOn = false; 
     navigationManager.removeRouteCalculationViews(); 
     mapView.deleteAllAnnotationsAndCustomPOIs(); 
     isRouteShown = false; 
     corLDriveInfoContainer.setVisibility(View.VISIBLE); 

     if (isDrivingDirectionsOn) { 
      rlDrivingDirections.setVisibility(View.VISIBLE); 
      ((ToolbarActivity) getActivity()).getSupportActionBar().setTitle(R.string.app_name); 
      if (drivingDirectionDestPoint != null) { 
       mapView.deleteAllAnnotationsAndCustomPOIs(); 
       addAnnotation(drivingDirectionDestPoint); 
       mapView.centerMapOnPosition(new SKCoordinate(drivingDirectionDestPoint.getLongitude(), drivingDirectionDestPoint.getLatitude())); 
      } 
      if (drivingDirectionStartPoint != null) { 
       mapView.deleteAllAnnotationsAndCustomPOIs(); 
       addAnnotation(drivingDirectionStartPoint); 
      } 
     } else if (latestDriveInfoPlace != null) { 
      setSearchViewShown(true); 
      addAnnotation(latestDriveInfoPlace); 
      mapView.setZoom(MapUtils.DEFAULT_ZOOM_VALUE); 
      mapView.centerMapOnPosition(new SKCoordinate(latestDriveInfoPlace.getLongitude(), latestDriveInfoPlace.getLatitude())); 
      searchItem.expandActionView(); 
      searchView.setQuery(latestDriveInfoPlace.getName(), false); 
      searchView.clearFocus(); 
     } 
     return true; 
    } else if (isDrivingDirectionsOn) { 
     isDrivingDirectionsOn = false; 
     rlDrivingDirections.setVisibility(View.GONE); 
     corLDriveInfoContainer.setVisibility(View.GONE); 
     setSearchViewShown(true); 
     searchItem.collapseActionView(); 
     drivingDirectionDestPoint = null; 
     drivingDirectionStartPoint = null; 
     atvDestination.setText(""); 
     atvStart.setText(""); 
     hideKeyboard(); 
     ((DrawerViewInterface) getActivity()).showHamburgerIcon(); 
     ((DrawerViewInterface) getActivity()).unlockDrawer(); 
     mapView.deleteAllAnnotationsAndCustomPOIs(); 
     return true; 
    } 
    return false; 
} 

更新代码

我已经实现了ProgressDialog

progressBar = new ProgressDialog(getActivity()); 
progressBar.setMessage("Loading ..."); 
progressBar.show(); 
progressBar.setCancelable(false); 

但是,我在哪里可以在这里使用的dismiss()方法返回的画面时back press后?可以做些什么来解决这个问题?

+0

什么是你想使用进度对话框? –

+0

我使用地图,所以后面按下地图需要时间来刷新,所以我想使用进度对话框。像这样的操作:'mapView.deleteAllAnnotationsAndCustomPOIs(); addAnnotation(drivingDirectionDestPoint); mapView.centerMapOnPosition(新SKCoordinate(drivingDirectionDestPoint.getLongitude(),drivingDirectionDestPoint.getLatitude())); '发生。所以,我想克服它。 –

+0

你不必实现onBackPress。如果每个片段中都有一个AsyncTask,请在onPreExecute()上启动对话框,然后在PostExecute()上关闭它。 –

回答

0

你想展示你的ProgressDialog一些任务(需要一些时间才能完成)开始时,当任务完成后关闭它。

我看不到这样的任务在您的代码段,但如果有一个我认为它提供了一个API来注册一个监听器中,你应该表现出和解散你的ProgressDialog。

如果没有,需要一些时间来完成任务,这是不好的做法,以显示ProgressDialog。尝试一种不同的方法。也许一些动画(例如淡出视图,更改数据,淡入视图)。

+0

有几个任务,如:'mapView.deleteAllAnnotationsAndCustomPOIs(); addAnnotation(drivingDirectionDestPoint); mapView.centerMapOnPosition(新SKCoordinate(drivingDirectionDestPoint.getLongitude(),drivingDirectionDestPoint.getLatitude()));在后面按下视图后按[ ]。 –

+0

你的建议也是一个好主意或一个选项。 –

0

尝试这样的事情在每个片段:

@Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     progressBar = new ProgressDialog(getActivity()); 
     progressBar.setMessage("Loading ..."); 
     progressBar.show(); 
     progressBar.setCancelable(false); 


    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 

    //Network call to refresh map data 


     } 

    @Override 
    protected void onPostExecute(final Boolean success) { 
     if(success) 
      progressBar.dismiss(); 

} 
0

您可以使用进度的onResume并在onMapReady回调驳回。

在您的片段的onResume:

if(mMap == null){ 
    progressBar = new ProgressDialog(getActivity()); 
    progressBar.setMessage("Loading ..."); 
    progressBar.show(); 
    progressBar.setCancelable(false); 
} 

,并在您onMapReady:

if(progressBar != null && progressBar.isShowing()){ 
    progressBar.dismiss(); 
}