开发者

Android - How can I access a View object instantiated in onCreate in onResume?

开发者 https://www.devze.com 2023-02-04 23:22 出处:网络
In my onCreate() method, I\'m instantiating an ImageButton View: public void onCreate(Bundle savedInstanceState) {

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

精彩评论

暂无评论...
验证码 换一张
取 消