2017-01-03 11 views
0

Я нажал Back Button либо после navigation start, либо после route shown.Show ProgressDialog после обратной кнопки Нажмите

Я работаю над Fragment. View по порядку: A-B-C-D в Fragment. И, Back Press Работа потока похожа: B: A, C: B: A, D: C: B: A.

Но, я хочу использовать progress bar после каждого back press перед отображением экрана, где я пришел после 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

Я использую карту, поэтому после обратной печати нажмите время, чтобы обновить, поэтому я хочу использовать Progress Dialog. Что-то вроде: такая операция: «mapView.deleteAllAnnotationsAndCustomPOIs(); addAnnotation (driveDirectionDestPoint); mapView.centerMapOnPosition (новый SKCoordinate (driveDirectionDestPoint.getLongitude(), driveDirectionDestPoint.getLatitude())); 'произойдет. Итак, я хочу преодолеть это. –

+0

Вам не нужно реализовывать это onBackPress. Если у вас есть AsyncTask в каждом фрагменте, запустите диалог onPreExecute() и отпустите его в PostExecute(). –

ответ

0

Вы хотите показать свой ProgressDialog, когда начнется какая-то задание (требуется некоторое время для завершения) и отпустите его, когда задача завершится.

Я не вижу такую ​​задачу в фрагменте кода, но если есть такой, я считаю, что он предоставляет API для регистрации слушателя, в котором вы должны показывать и отклонять свой ProgressDialog.

Если у вас нет задачи, требующей некоторого времени для завершения, не рекомендуется демонстрировать ProgressDialog. Попробуйте другой подход. Возможно, некоторые анимации (например, исчезают представления, изменяют данные, исчезают в представлениях).

+0

Есть несколько заданий типа: 'mapView.deleteAllAnnotationsAndCustomPOIs(); addAnnotation (driveDirectionDestPoint); mapView.centerMapOnPosition (новый SKCoordinate (driveDirectionDestPoint.getLongitude(), driveDirectionDestPoint.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(); 
}