Android - 如何在onResume中访问onCreate中实例化的View对象?

时间:2011-01-17 18:26:27

标签: java android views

在我的onCreate()方法中,我正在实例化一个ImageButton视图:

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

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

在onResume中,我希望能够通过以下方式更改ImageButton的属性: @覆盖 protected void onResume(){     super.onResume();     ib.setImageURI(selectedImageUri); } // END onResume

但onResume无法访问ib ImageButton对象。如果这是一个变量,我会简单地将它变成一个类变量,但是Android不允许你在类中定义View对象。

有关如何执行此操作的任何建议吗?

3 个答案:

答案 0 :(得分:5)

我会将图像按钮设为实例变量,如果您愿意,可以从两种方法中引用它。即。做这样的事情:

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

值得注意的是,Android中的实例变量相对较贵,因此如果只在一个地方使用,那么在方法中使用局部变量会更有效。

答案 1 :(得分:3)

findViewById()不创建视图,它只是查找已创建的视图。它是通过膨胀前一行中的布局R.layout.layout_post创建的。

您只需在findViewById()方法中调用onResume()即可在该方法中获取对它的引用,或者您可以将ib更改为实例变量,以便可以在方法中访问它onCreate()以外的人。

答案 2 :(得分:1)

将声明从方法移动到类。假设selectedImageUri在范围内......

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