2017-01-03 11 views
0

navigation startの後またはroute shownの後にBack Buttonを押しました。戻るボタンを押した後にプログレスダイアログを表示

私はFragmentに取り組んでいます。 Viewのようになる:FragmentのA-B-C-D。そして、Back Pressワークフローは、B:A、C:B:A、D:C:B:Aのようになります。

back pressの画面が表示される前に、back pressの後にprogress barを使用します。

IはonBackPress方法で、次のコードを使用している:私はProgressDialogを実装している

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; 
} 

更新コード

。私は、画面back pressを返した後、ここでdismiss()メソッドを使用します

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

しかし、?この問題を解決するために何ができるのですか?

+0

は何のために、進行状況ダイアログを使用しようとしていますか? –

+0

私はマップを使用していますので、バックプレスマップをリフレッシュするまでに時間がかかるので、Progress Dialogを使いたいです。何かのように:この種の操作: 'mapView.deleteAllAnnotationsAndCustomPOIs(); addAnnotation(drivingDirectionDestPoint); mapView.centerMapOnPosition(new SKCoordinate(drivingDirectionDestPoint.getLongitude()、drivingDirectionDestPoint.getLatitude())); 'が発生します。だから、私はそれを克服したい。 –

+0

あなたはそのonBackPressを実装する必要はありません。各フラグメントにAsyncTaskがある場合は、onPreExecute()でダイアログを開始し、PostExecute()でそれを閉じます。 –

答えて

0

タスクが完了するまでに時間がかかる場合は、ProgressDialogを表示し、タスクが終了すると終了します。

コードスニペットでこのようなタスクが表示されない場合は、ProgressDialogを表示および却下するリスナーを登録するAPIが提供されていると思います。

タスクが完了するまでに時間がかかる場合は、ProgressDialogを表示することをお勧めしません。別のアプローチを試してみてください。たぶんいくつかのアニメーション(例えば、ビューを消したり、データを変えたり、ビューをフェードイン)。

+0

次のようなタスクはほとんどありません: 'mapView.deleteAllAnnotationsAndCustomPOIs(); addAnnotation(drivingDirectionDestPoint); mapView.centerMapOnPosition(new 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(); 
} 
関連する問題