2013-09-26 1 views
-4

Одним из параметров для метода Toast.makeText() является контекст.Тосты в Android

И для этого параметра, я вижу, что значение дано как ActivityName.this в некоторых учебниках для Android.

Не должно быть this.xxx?

+0

Как вы сравнили 'ActivityName.this' и' this.xxx'? 'this.xxx' всегда будет ссылаться на элемент класса не сам. –

+0

u говорят 'this' или' this.xxx' –

ответ

1

Не всегда, это зависит от того, где вы создаете тост. Если, например, вы создаете тост в методе onClick для прослушивателя кликов Button, this будет Button, который не может предоставить контекст.

+0

вы не можете использовать 'this' в прослушивателе кликов только в том случае, если это анонимный класс. Существует несколько способов реализации прослушивателя. Один из способов - объявить' android: onClick = "щелкнуть" атрибут к кнопке XML и объявить метод 'click (View v) {// выполнить задачу}' .. В этом случае слушатель не является анонимным классом –

+0

Это был всего лишь возможный пример, объясняющий, почему вы не всегда может использовать это как контекст. Я не собирался делать лекции об этом. – fasteque

+0

Успокойся. Просто упомянутый клик-слушатель, поэтому я указал на это. –

0

Не совсем. Если вы находитесь внутри внутреннего класса ActivityName, вы вызываете ActivityName.this. Если вы не во внутреннем классе, вы просто вызываете this. Дело в том, чтобы обратиться к Activity и использовать его в качестве контекста.

1

ActivityName.this получает ссылку на объект охватывающего класса с этим именем, если код находится в вложенном классе. Например, если вы пишете этот код внутри кода Activity «s:

public void onCreate(Bundle bundle) { 
    // ... 
    Button button = (Button) findViewById(R.id.button1); 

    button.setOnClickListener(new OnClickListener() { // An anonymous nested class 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(this, "Example", Toast.LENGTH_SHORT); 
      // This one causes an error; this is not a Context 
      Toast.makeText(YourActivity.this, "Example", Toast.LENGTH_SHORT); 
      // This one works 
     } 
    }); 
} 

Первый this теперь ссылается на объект типа OnClickListener. Это не Context, так что это ошибка. Второй относится к локальному YourActivity, который является Activity и поэтому Context, поэтому он работает.

Смежные вопросы