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
- Cómo crear una actividad sin 'setContentView (R.layout.main)'
- Android: ¿Qué precaución debo tener al usar la propiedad setTag () de View?
- Llamar al diálogo de Android sin que desaparezca el fondo
- Guardar agregados mediante programación Vistas sobre el cambio de orientación?
- Android - ¿cuándo se llama a performTraversals?
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?
- Crear una vista compuesta en Android
- RemoteViews setLayoutParams?
- Método para permitir que una sola vista secundaria desborde los límites del grupo de vista?
- ¿Es posible colocar una vista sobre otra en android?
- Cómo agregar el encabezado a la vista de lista En Android
- Hacer un clic de vista en primer plano
- Android: ¿Cómo obtener la altura y el ancho de una vista personalizada?
- Clone textview para anexarlo a un ViewGroup
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); } }