Android – ¿Cómo puedo acceder a un objeto View instanciado en onCreate en onResume?

En mi método onCreate (), estoy instanciando un ImageButton View:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_post); final ImageButton ib = (ImageButton) findViewById(R.id.post_image); ... 

En onResume, quiero ser capaz de cambiar las propiedades de ImageButton con algo como: @Override protected void onResume () {super.onResume (); ib.setImageURI (selectedImageUri); } // END onResume

Pero onResume no tiene acceso al objeto ib ImageButton. Si se tratara de una variable, haría simple una variable de clase, pero Android no le permite definir el objeto Ver en la clase.

¿Alguna sugerencia sobre cómo hacer esto?

Haría que el botón de la imagen una variable de la instancia, después usted puede referir a ella de ambos métodos si usted tiene gusto. es decir. hacer algo como esto:

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

Vale la pena tener en cuenta que las variables de instancia son relativamente caras en Android, por lo que es más eficiente usar una variable local dentro del método si sólo se utiliza en un solo lugar.

findViewById() no crea la vista, simplemente está encontrando la vista ya creada. Se creó inflando la disposición R.layout.layout_post en la línea anterior.

Podría simplemente llamar a findViewById() en su método onResume() para obtener una referencia a él en ese método, o podría cambiar ib a una variable de instancia para que sea accesible en otros métodos que onCreate() .

Mueva la declaración del método a la clase. Suponiendo que selectedImageUri esté dentro del alcance …

 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); } } 
  • Adición de vistas a un grupo de vistas de Android mediante programación
  • el ancho de conjunto a la vista de texto no funciona
  • ¿Cómo emitir un mensaje de confirmación (sí / no) de una tarea de Android?
  • Botones para rellenar el ancho cuando se utiliza TableLayout
  • Lista de botones en Android
  • Cual es la diferencia entre getTop y getY
  • ¿Cómo alinear vistas en el centro de otra línea de base de vistas?
  • La rotación de vista de Android no ocurre después de algunas llamadas de setAnimation
  • Android: cómo tener una imagen de fondo centrada en una vista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.