2

플래그먼트 내에 표시되지 :는해서 ProgressDialog 난 다음 클래스가

... 

public class FragmentMapa extends Fragment { 

    /* 
    * Atributos 
    */ 
    private static String LOG_TAG = "FragmentMapa"; 

    private HomeActivity homeActivity; 
    private GoogleMap mMapa; 

    private DrawerLayout mDrawer; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private ListView mDrawerList; 
    private ListView mDrawerRightList; 
    private RelativeLayout mDrawerRelativeLayout; 
    private String[] mRightDrawerMenuTitles; 
    private ImageView mDiputacionLogo; 

    private IncidenciasFetchAsyncTask mFetchIncidenciasTask; 
    private Incidencias mIs; 
    private CamarasFetchAsyncTask mFetchCamarasTask; 
    private Camaras mCams; 
    private ViabilidadesInvernalesFetchAsyncTask mFetchViabilidadesInvernalesTask; 
    private ViabilidadesInvernales mVis; 

    private static LatLng POS_CENTRAL = new LatLng(43.243968,-2.896957); 
    private static LatLng limiteSurOesteBizkaia = new LatLng(42.895853,-3.594589); 
    private static LatLng limiteNorEsteBizkaia = new LatLng(43.540351,-2.180099); 
    private static final LatLngBounds BOUNDS = new LatLngBounds(limiteSurOesteBizkaia, limiteNorEsteBizkaia); 

    private ArrayList<Marker> markersIncidencias = new ArrayList<Marker>(); 
    private ArrayList<Marker> markersObras = new ArrayList<Marker>(); 
    private ArrayList<Marker> markersCamaras = new ArrayList<Marker>(); 
    private ArrayList<Marker> markersViabilidadInvernal = new ArrayList<Marker>(); 

    /* 
    * Métodos 
    */ 

    public FragmentMapa() { 

    } 

    @Override 
    public void onAttach (Activity activity) { 
     super.onAttach(activity); 
     homeActivity = (HomeActivity) activity; 

     mRightDrawerMenuTitles = getResources().getStringArray(R.array.mapa_submenu_options); 

     mDrawer = homeActivity.getmDrawer(); 
     mDrawerRightList = homeActivity.getmDrawerRightList(); 
     mDrawerRightList.setAdapter(new ArrayAdapter<String>(
       homeActivity.getSupportActionBar().getThemedContext(), 
       R.layout.rightdrawer_map_list_item, 
       mRightDrawerMenuTitles 
       )); 

     mDrawerRightList.setOnItemClickListener(new DrawerItemClickListener()); 
    } 

    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


    } 

    @Override 
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.mapa, container, false); 

     setupMapIfNeeded(); 

     return rootView; 

    } 

    private void setupMapIfNeeded() { 

     if(mMapa == null){ 
      SupportMapFragment smf = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapaPrincipal); 

      if(smf != null){ 
       //Toast.makeText(getActivity(), "VAAAMOOSS", Toast.LENGTH_SHORT).show(); 
       mMapa = smf.getMap(); 
      }/*else{ 
       Toast.makeText(getActivity(), "smf es null...", Toast.LENGTH_SHORT).show(); 
      }*/ 

      if(mMapa != null){ 

       setupMap(); 

      } 

     } 

    } 

    private void setupMap() { 

     //Toast.makeText(getActivity(), "A configurar el mapa!!", Toast.LENGTH_SHORT).show(); 

     CameraPosition camPos; 
     camPos = new CameraPosition.Builder() 
     .target(POS_CENTRAL) 
     .zoom((float) 9.5) 
     .build(); 

     final CameraUpdate camUpd = 
       CameraUpdateFactory.newCameraPosition(camPos); 

     mMapa.animateCamera(camUpd); 
     mMapa.setOnCameraChangeListener(new OnCameraChangeListener() { 

      @Override 
      public void onCameraChange(CameraPosition newPos) { 

       float maxZoom = 17.0f; 

       if(!BOUNDS.contains(newPos.target)){ 
        //Mover la cámara al centro si se 
        //va más allá de los límites 

        mMapa.animateCamera(camUpd); 
       } 

       if(newPos.zoom > maxZoom){ 
        mMapa.animateCamera(CameraUpdateFactory.zoomTo(maxZoom)); 
       } 

      } 
     }); 

     mMapa.setOnInfoWindowClickListener(new OnInfoWindowClickListener(){ 

      public void onInfoWindowClick(Marker aMarker) { 

       Toast.makeText(getActivity(), "info window pulsado", Toast.LENGTH_SHORT).show(); 
       if(markersCamaras.contains(aMarker)){ 

        Camara c = mCams.getCamaraByCoord(aMarker.getPosition()); 

        homeActivity.showCameraFragment(c); 

       } 
      } 

     }); 

    } 

    @Override 
    public void onActivityCreated (Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

    } 

    @Override 
    public void onViewStateRestored (Bundle savedInstanceState) { 
     super.onViewStateRestored(savedInstanceState); 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
    } 

    @Override 
    public void onDestroyView() { 
     super.onDestroyView(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
    } 

    /* The click listener for ListView in the navigation drawer */ 
    private class DrawerItemClickListener implements OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      final int thePos = position; 
      mDrawer.setDrawerListener(new DrawerLayout.SimpleDrawerListener(){ 

       @Override 
       public void onDrawerClosed(View drawerView) { 

        boolean wasChecked = !mDrawerRightList.isItemChecked(thePos); 

        //Toast.makeText(homeActivity, "Item pulsado: " + wasChecked, Toast.LENGTH_SHORT).show(); 
        mDrawerRightList.setItemChecked(thePos, !wasChecked); 

        switch (thePos) { 
         case 0: 
          //Incidencias 
          //Toast.makeText(homeActivity, "Incidencias", Toast.LENGTH_SHORT).show(); 

          if(!wasChecked){ 
           //Toast.makeText(homeActivity, "Incidencias estaba sin pulsar", Toast.LENGTH_SHORT).show(); 

           getIncidenciasObras(); 
           introducirIncidencias(); 
          }else{ 
           //Toast.makeText(homeActivity, "Incidencias estaba pulsado", Toast.LENGTH_SHORT).show(); 
           removeIncidenciasMarkers(); 
          } 

          break; 

         case 1: 
          //Obras 
          //Toast.makeText(homeActivity, "Obras", Toast.LENGTH_SHORT).show(); 

          if(!wasChecked){ 
           //Toast.makeText(homeActivity, "Obras estaba sin pulsar", Toast.LENGTH_SHORT).show(); 
           getIncidenciasObras(); 
           introducirObras(); 
          }else{ 
           //Toast.makeText(homeActivity, "Obras estaba pulsado", Toast.LENGTH_SHORT).show(); 
           removeObrasMarkers(); 
          } 

          break; 

         case 2: 
          //Cámaras 
          //Toast.makeText(homeActivity, "Cámaras", Toast.LENGTH_SHORT).show(); 

          if(!wasChecked) { 
           getCamaras(); 
           introducirCamaras(); 
          }else 
           removeCamarasMarkers(); 
          break; 

         case 3: 
          //Viabilidad invernal 
          //Toast.makeText(homeActivity, "Viabilidad invernal", Toast.LENGTH_SHORT).show(); 

          if(!wasChecked){ 
           getViabilidadesInvernales(); 
           introducirViabilidadInvernal(); 
          }else 
           removeViabilidadInvernalMarkers(); 
          break; 

         default: 
          //Toast.makeText(homeActivity, "Default", Toast.LENGTH_SHORT).show(); 
          break; 

        } 

       } 

      }); 

      if(mDrawer.isDrawerOpen(Gravity.END)) 
       mDrawer.closeDrawer(mDrawerRightList); 
     } 
    } 

    private void getViabilidadesInvernales(){ 
     mVis = ViabilidadesInvernales.getInstance(); 
     if(mVis.isEmptyViabilidadesInvernales()){ 
      mFetchViabilidadesInvernalesTask = new ViabilidadesInvernalesFetchAsyncTask(homeActivity); 
      try { 
       mVis = mFetchViabilidadesInvernalesTask.execute("es").get(); 
      } catch (InterruptedException e) { 
       Log.e(LOG_TAG, "Error InterruptedException: " + e.getMessage()); 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       Log.e(LOG_TAG, "Error ExecutionException: " + e.getMessage()); 
       e.printStackTrace(); 
      } 
     } 

    } 

    ... 

    private void introducirViabilidadInvernal() { 

     if(markersViabilidadInvernal.isEmpty()){ 
      Marker aMarker; 

      for (ViabilidadInvernal vi : mVis.getViabilidades()) { 

       String estado = ""; 
       BitmapDescriptor icon; 
       if(vi.getEstado() == PuertoEstado.ABIERTO){ 
        estado = getResources().getString(R.string.mapa_puerto_abierto); 
        icon = BitmapDescriptorFactory.fromResource(R.drawable.marker_puertoabierto); 
       }else{ 
        //vi.getEstado() == PuertoEstado.CERRADO 
        estado = getResources().getString(R.string.mapa_puerto_cerrado); 
        icon = BitmapDescriptorFactory.fromResource(R.drawable.marker_puertocerrado); 
       } 

       aMarker = mMapa.addMarker(new MarkerOptions() 
       .position(vi.getCoord()) 
       .title(vi.getT()) 
       .snippet(estado) 
       .icon(icon)); 

       markersViabilidadInvernal.add(aMarker); 

      } 

     } 

    } 


    private void removeViabilidadInvernalMarkers() { 

     for(Marker aMarker : markersViabilidadInvernal){ 
      aMarker.remove(); 
     } 

    } 

    ... 

    private class ViabilidadesInvernalesFetchAsyncTask extends AsyncTask<String, Void, ViabilidadesInvernales>{ 

     private ProgressDialog mPd; 
     private HomeActivity ownerActivity; 
     private Context context; 
     private Exception exceptionToBeThrown; 

     public ViabilidadesInvernalesFetchAsyncTask(Activity activity){ 
      this.ownerActivity = (HomeActivity) activity; 
      context = activity; 
      this.exceptionToBeThrown = null; 
      mPd = new ProgressDialog(context); 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      mPd.setTitle("cargando"); 
      mPd.setMessage("miralo"); 
      //mPd.setTitle(getResources().getString(R.string.mapa_cargando_titulo)); 
      //mPd.setMessage(getResources().getString(R.string.mapa_cargando, getResources().getString(R.string.mapa_cargando_elemento_viabilidad))); 
      mPd.setCancelable(false); 
      mPd.setIndeterminate(true); 
      mPd.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      mPd.show(); 

     } 

     @Override 
     protected ViabilidadesInvernales doInBackground(String... params) { 
      String idioma = params[0]; 
      if(!idioma.equalsIgnoreCase("es") && !idioma.equalsIgnoreCase("eu")){ 
       idioma = "es"; 
      } 
      SystemClock.sleep(5000); 
      ViabilidadesInvernalesParser vip = new ViabilidadesInvernalesParser(); 
      ViabilidadesInvernales lasViabilidades = vip.parse(idioma); 

      Log.d(LOG_TAG, lasViabilidades.toString()); 

      ViabilidadesInvernales vis = ViabilidadesInvernales.getInstance(); 

      return vis; 

     } 

     @Override 
     protected void onPostExecute(ViabilidadesInvernales vis) { 
      super.onPostExecute(vis); 
      mVis = vis; 

      if(mPd != null){ 
       mPd.dismiss(); 
      } 

      // Check if exception exists. 
      //if (exceptionToBeThrown != null) { 
       //TODO 
       //ownerActivity.handleXXX(); 
       //throw exceptionToBeThrown; 
      //} 
     } 

    } 
    .... 

} 

목적은 대화 (해서 ProgressDialog)을 표시하는 것이다 AsyncTask를 실행하면, 다이얼로그의 UI의 프론트에 남아 있도록 잠시 후지도 (이전에 표시되었던지도)가 앞으로 돌아옵니다. 좀 더 정확히 말하자면, 응용 프로그램 (홈 액티비티)을 실행하고 왼쪽 서랍을 열고 Mapa를 누른 다음 현재 조각으로 이동하십시오. 빈지도가 표시됩니다. 오른쪽 서랍을 열고 버튼을 누릅니다. 그 직후 AsyncTask를 실행하는 프로세스가 실행됩니다 (그리고 원하는 ProgressDialog).

왜 그런지 알 수는 없지만 ProgressDialog가 표시되지는 않지만 "절전"프로세스가 정상이며 (때마다 AsyncTask가 제대로 실행 됨) 깨달았습니다.

누구든지 나를 도와 줄 수 있습니까?

추신 : 내 주요 활동 (HomeActivity)이 조각을 시작합니다. 주 활동에는 두 개의 서랍이 있습니다. 왼쪽 서랍이 항상 표시되며 오른쪽 서랍은 FragmentMapa (내가 지금 당신에게 보여줄 조각)를 시작할 때만 볼 수 있습니다. 이 문제는 서랍 동작 때문일 수 있습니까?

고맙습니다.

+0

나는 dismiss()에 댓글을 달았고 ProgressDialog를 볼 수 있습니다! 그러나 AsyncTask가 실행 된 후 ProgressDialog가 시작되었다는 것을 깨달았습니다 (제 생각에는 ProgressDialog가 먼저 표시되어야 함). – russellhoff

+0

이 답변을 확인 했습니까? http://stackoverflow.com/a/17518924/2879783 –

+0

나는 stackoverflow에 파고 들었지만 많이 봤지만 아무 단서도. ProgressDialog와 execute(). get()이 잘 진행되지 않는다는 것을 읽고 이해할 수있었습니다. 그리고 이것은 근본적인 문제입니다. – russellhoff

답변

0

해결되었습니다. 이 문제가 발생한 사람은 누구나 https://stackoverflow.com/a/3291713/828551 게시물을 확인하십시오.

AsyncTask 내에서 인터페이스의 인스턴스를 만들고 AsyncTask를 시작하는 인터페이스를 구현해야합니다.