5 votes

Android - Comment puis-je accéder à un objet View instancié dans onCreate dans onResume ?

Dans mon onCreate() j'instancie une méthode ImageButton Voir :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_post);

    final ImageButton ib = (ImageButton) findViewById(R.id.post_image);
...

En onResume je veux pouvoir modifier les propriétés de l'objet de l'enquête. ImageButton avec quelque chose comme :

@Override
protected void onResume() {
    super.onResume();
    ib.setImageURI(selectedImageUri);
}

Mais onResume n'a pas accès à la ib ImageButton objet. S'il s'agissait d'une variable, j'en ferais simplement une variable de classe, mais Android ne vous permet pas de définir l'objet View dans la classe.

Avez-vous des suggestions sur la manière de procéder ?

7voto

Captain Spandroid Points 169

Je ferais du bouton de l'image une variable d'instance, alors vous pouvez y faire référence à partir des deux méthodes si vous le souhaitez. par exemple, faites quelque chose comme ceci :

private ImageButton mImageButton = null;

public void onCreate(Bundle savedInstanceState) {
  Log.d(AntengoApplication.LOG_TAG, "BrowsePicture onCreate");
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layout_post);

  mImageButton = (ImageButton) findViewById(R.id.post_image);
  //do something with mImageButton
}

@Override
protected void onResume() {
  super.onResume();
  mImageButton = (ImageButton) findViewById(R.id.post_image);
  mImageButton.setImageURI(selectedImageUri);
}

Il faut cependant garder à l'esprit que les variables d'instance sont relativement coûteuses dans Android, il est donc plus efficace d'utiliser une variable locale dans la méthode si elle n'est utilisée qu'à un seul endroit.

3voto

mbaird Points 31293

findViewById() ne crée pas la vue, il ne fait que retrouver la vue déjà créée. Elle a été créée en gonflant le layout R.layout.layout_post dans la ligne précédente.

Vous pourriez simplement appeler findViewById() dans votre onResume() pour obtenir une référence à celle-ci dans cette méthode, ou vous pouvez modifier la méthode ib à une variable d'instance pour qu'elle soit accessible dans des méthodes autres que onCreate() .

1voto

William Scott Points 1083

Déplacez la déclaration de la méthode vers la classe. En supposant que selectedImageUri est dans le champ d'application...

public class MyApp extends Activity {
    ImageButton ib;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d(AntengoApplication.LOG_TAG, "BrowsePicture onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_post);

        ib = (ImageButton) findViewById(R.id.post_image);
    }

    @Override
    protected void onResume() {
        super.onResume();
        ib.setImageURI(selectedImageUri);
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X