2014-05-23 2 views
1

Je suis un peu nouveau chez Java et j'ai une question simple. Dans le code ci-dessous:Attribut des objets d'accès aux objets imbriqués

conversation.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {   
      if (adapter.getItem(position).image && adapter.getItem(position).left) { 
       String imgName = ((Message)arg1.findViewById(R.id.imageUploaded).getTag()).message; 
       try { 
        AlertDialog.Builder confirmQuit = new AlertDialog.Builder(Chat.this); 
        confirmQuit.setMessage("Download image?"); 

        // Buttons on dialog 
        confirmQuit.setPositiveButton("Download", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 

         } 
        }); 
        confirmQuit.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          // Do nothing 
         } 
        }); 
        confirmQuit.create(); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 
     } 
    }); 
} 

C'est un code Android et je voudrais savoir comment puis-je accéder aux variables position et imgName à l'intérieur du DialogInterface.OnClickListener?

Habituellement, dans ces cas, je crée une variable privée "globale" en tant qu'attribut de mon activité afin que je puisse y accéder n'importe où, mais cela ne semble pas correct. Quelqu'un peut-il aider?

Merci d'avance.

Répondre

2

il suffit de changer

String imgName = ... 

à

final String imgName = ... 

De Java Tutorial pour Anonymous Classes:

Accès aux variables locales de la portée englobante

Comme les classes locales, les classes anonymes peuvent capturer des variables; ils ont le même accès aux variables locales du champ renfermant:

  • Une classe anonyme a accès aux membres de sa classe englobante.
  • Une classe anonyme ne peut pas accéder aux variables locales dans sa portée englobante qui ne sont pas déclarées comme définitives ou effectivement définitives.
+0

Je me sens stupide .-. Va lire sur les attributs finaux. Merci mec. :) –

+1

@ JoãoMenighin a édité la réponse pour plus de détails. J'espère que c'est utile :) – matiash