In my onCreate()
method, I'm instantiating an ImageButton
View:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_post);
final ImageButton ib = (ImageButton) findViewById(R.id.post_image);
...
In onResume
, I want to be able to change the properties of the ImageButton
with something like:
@Override
protected void onResume() {
super.onResume();
ib.setImageURI(selectedImageUri);
开发者_StackOverflow}
But onResume
doesn't have access to the ib ImageButton
object. If this were a variable, I'd simple make it a class variable, but Android does not allow you to define View object in the class.
Any suggestions on how to do this?
I would make the image button an instance variable, then you can refer to it from both methods if you like. ie. do something like this:
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);
}
It's worth bearing in mind though that instance variables are relatively expensive in Android, so it's more efficient to use a local variable within the method if it's only used in one place.
findViewById()
does not create the view, it is just finding the already created view. It was created by inflating the layout R.layout.layout_post
in the previous line.
You could simply call findViewById()
in your onResume()
method to get a reference to it in that method, or you could change ib
to an instance variable so that it is accessible in methods other than onCreate()
.
Move the declaration from the method to the class. Assuming selectedImageUri
is within scope...
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);
}
}
精彩评论