Android - Как я могу получить доступ к объекту View, созданному в onCreate в onResume? - PullRequest
4 голосов
/ 17 января 2011

В моем методе onCreate () я создаю экземпляр ImageButton View:

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

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

В onResume я хочу иметь возможность изменять свойства ImageButton следующим образом: @Override protect voidonResume () {super.onResume ();ib.setImageURI (selectedImageUri);} // END onResume

Но onResume не имеет доступа к объекту ib ImageButton.Если бы это была переменная, я бы просто сделал ее переменной класса, но Android не позволяет вам определять объект View в классе.

Есть предложения о том, как это сделать?

Ответы [ 3 ]

5 голосов
/ 17 января 2011

Я бы сделал кнопку изображения переменной экземпляра, тогда вы можете ссылаться на нее из обоих методов, если хотите.то есть.сделайте что-то вроде этого:

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, поэтому более эффективно использовать локальную переменную внутри метода, если она используется только в одном месте.

3 голосов
/ 17 января 2011

findViewById() не создает представление, оно просто находит уже созданное представление.Он был создан путем надувания макета R.layout.layout_post в предыдущей строке.

Вы можете просто вызвать findViewById() в вашем методе onResume(), чтобы получить ссылку на него в этом методе, или вы можете изменить ib переменной экземпляра, чтобы она была доступна в методах, отличных от onCreate().

1 голос
/ 17 января 2011

Переместить объявление из метода в класс.Предполагая, что 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);
    }
}
...