получить объект Activity, находясь в контексте View - PullRequest
3 голосов
/ 10 октября 2010

Это продолжение этого поста:

findViewById в подклассе SurfaceView, генерирующее RuntimeException

Основано на отзывах Романа Гая (которые я вскоре приму, так какявляется решением), я хотел бы получить вызывающую активность из представления, чтобы я мог использовать ее для получения требуемого ресурса TextView.

Я не вижу методов в представлении, которые возвращают активность,Как правильно это сделать?Или есть лучшая альтернатива для работы с TextViews из другого контекста View.

По сути, я вызываю setContentView (R.layout.xxx) в onCreate () (как обычно), поэтому я не оченьесть способ передать ссылки на дополнительные TextViews, если я неуклюже получу View после setContentView, а затем вызову его.

Ответы [ 2 ]

7 голосов
/ 10 октября 2010

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

setContentView(...);
MySurfaceView v = findViewById(R.id.theusrface);
TextView t = findViewById(R.id.thecontent);
v.setContent(v);

Логика не должна идти в ваших представлениях.

4 голосов
/ 03 января 2012

Если вы уже знаете класс Activity, в котором находится ваш View, т.е. MyActivity, вы можете использовать статический член MyActivity.this внутри вашего View и его слушателей, как в следующем примере:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
       .setCancelable(false)
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
           }
       });
AlertDialog alert = builder.create();

, который я нашел в этом уроке для Android:

http://developer.android.com/guide/topics/ui/dialogs.html

Это творило чудеса для меня.

...