конструктор AlertDialog.Builder принимает в качестве параметра контекст:
AlertDialog.Builder(Context context)
,
и я нашел пример, где параметр не только this
но:
new AlertDialog.Builder(MyClassName.this);
Почему так?
Кроме того, я уже видел эту вещь в Activity
, где на этот раз мы добавляем .class
к названию активности, которое мы пытаемся достичь. Не могли бы вы рассказать мне о значении этих двух ключевых слов?
большое спасибо
Класс Activity является подклассом Context, поэтому вы можете использовать его как параметр в вашем примере. Теперь, если, например, вы находитесь внутри метода onClick (например, кнопки) или внутри внутреннего класса или асинтезы, использование "this" не относится к самой активности, поэтому вам нужно использовать YourActivity.this.
Вместо этого, когда вы видите ClassName.class, это обычно происходит из-за того, что вам нужно указать активность, службу или то, что вы хотите запустить, в этом случае тип параметра - это класс. Например, если вы хотите начать действие, вы используете:
Intent intent = new Intent(this or ActivityName.this, AnotherActivityName.class);
Например:
public class MyActivity extends Activity {
....
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
// in this case 'this' refers the current activity instance
// (but of course you can also use MyActivity.this
myAdapter = new ArrayAdapter(this, R.layout.list_item, items);
...
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// here you must use ActivityName.this because
// 'this' refers to the OnClickListner instance
Intent intent = new Intent(ActivityName.this, AnotherActivityNameActivityName.class);
startActivity(intent);
}
});
...
}
this
или ActivityName.this
то же самое , правильно?
Если вы хотите обратиться к внешнему классу (MyClassName
который является Context
в вашем примере) внутреннего класса, в котором AlertDialog.Builder
, вы должны использовать MyClassName.this
иначе, this
будет ссылка на внутренний класс.
this
или MyClass.this
Это то же самое, чтобы вызвать контекст?
как и dtmilano, AlertDialog - это вид вида, должен относиться к контексту, как и любой другой вид.
это ключевое слово java для доступа к переменной этого класса, у всего приложения есть контекст и который передается в действие currenlty на экране, так что написание этого или имени класса. Это означает одно и то же, когда вы хотите написать код в класс, который не является активностью и использует некоторые из функций actitvty, вы должны передать это или имя класса. Это и использовать контекст там в классе non activity