2013-05-06 7 views
0

Я пишу приложение, которое показывает 2 кнопки в диалоговом окне предупреждения, один для выбора объектов, другой - для отображения деталей.Чтение частного поля в OnCreateDialog

Я оцениваю, имеет ли карта с выбранными новыми элементами значения, но даже очищая карту, условие возвращает всегда false.

Вот код OnCreateDialog() и AsyncTask были я вызвать диалог:

// Map Containing the objects already selected 
Map<String, IdentifyResult> itemsSelected = new HashMap<String, IdentifyResult>(); 

// Map Containing the new objects selected 
Map<String, IdentifyResult> longClickTemp = new HashMap<String, IdentifyResult>(); 

protected class IdentifyFeatures extends 
     AsyncTask<IdentifyParameters, Void, IdentifyResult[]> { 

    IdentifyTask identifier; 
    ProgressDialog progress; 

    @Override 
    protected IdentifyResult[] doInBackground(IdentifyParameters... params) { 
     IdentifyResult[] result = null; 

     if (params != null && params.length > 0) { 
      IdentifyParameters usedParams = params[0]; 
      try { 
       result = identifier.execute(usedParams); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return result; 
    } 

    @Override 
    protected void onPreExecute() { 
     identifier = new IdentifyTask(layer2.getUrl()); 
     progress=ProgressDialog.show(AEP41Activity.this, "Chargement", "Récupération de la sélection"); 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(IdentifyResult[] result) { 
     if (result != null && result.length > 0) { 

      Toast t = Toast.makeText(AEP41Activity.this, result.length 
        + " objects trouves", Toast.LENGTH_SHORT); 
      t.show(); 

      AEP41Activity.this.longClickTemp.clear(); 
      // Highlight features selected 

      for (int i = 0; i < result.length; i++) { 
       // Verify if the object is already selected 
       if (itemsSelected.containsKey(result[i].getAttributes() 
         .get("OBJECTID"))) { 
        Log.d("Object Already Exists", "Id: " 
          + result[i].getAttributes().get("OBJECTID")); 
        continue; 
       } 
       Log.d("Object Found", 
         "Object Type: " + result[i].getLayerName() 
           + " Id: " 
           + result[i].getAttributes().get("OBJECTID")); 

       AEP41Activity.this.longClickTemp.put(
         (String) result[i].getAttributes().get("OBJECTID"), 
         result[i]); 
      } 
      progress.dismiss(); 
      AEP41Activity.this.showDialog(CONTEXT_MENU_SELECT); 
     } else { 
      progress.dismiss(); 
      Toast t = Toast.makeText(AEP41Activity.this, 
        "Aucun objet trouve", Toast.LENGTH_SHORT); 
      t.show(); 
     } 
    } 
} 

@Override 
protected Dialog onCreateDialog(int id) { 
    AlertDialog.Builder builter = new AlertDialog.Builder(
      AEP41Activity.this); 

    switch (id) { 
    case CONTEXT_MENU_SELECT: 
     builter.setTitle("Selectionner Option"); 
     if(!longClickTemp.isEmpty()){ 
      builter.setPositiveButton("Selectionner", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        itemsSelected.putAll(longClickTemp); 
        updateSelectedMenu(); 
       } 
      }); 
     } 
     builter.setNeutralButton("Details", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       Bundle b = new Bundle(); 
       b.putStringArrayList("SelectedIds", Utilities.getStringArray(itemsSelected.keySet())); 
       b.putSerializable("TabValues", Utilities 
         .getIdentifyResultArray(longClickTemp)); 
       Intent i = new Intent(AEP41Activity.this, 
         FieldDetails.class); 
       i.putExtras(b); 
       startActivity(i); 
      } 
     }); 
     break; 
+0

Вы можете указать, какой 'условие' ты говоришь? Кроме того, ваш код является неполным, мы не можем представить, что такое 'identifier.execute (usedParams);' do. – Aballano

+0

идентификатор.execute (usedParams); из API ArcGIS. Условие if (! LongClickTemp.isEmpty()), потому что я очищаю карту перед вызовом onCreateDialog. И после первого выполнения это условие всегда ложно –

+0

Вы получили какой-либо журнал из 'Log.d (« Object Found »,« Object Type: «...» или тост-сообщение? – Aballano

ответ

0

Это была проблема кэшированных диалога.

Я не знал, что диалог был сохранен в андроиде.

Чтобы решить эту проблему, я добавил:

removeDialog(CONTEXT_MENU_SELECT);

перед тем AEP41Activity.this.showDialog(CONTEXT_MENU_SELECT);

Смежные вопросы