зачем добавлять имя класса в параметре AlertDialog.Builder?

1

конструктор AlertDialog.Builder принимает в качестве параметра контекст:

AlertDialog.Builder(Context context),

и я нашел пример, где параметр не только this но:

new AlertDialog.Builder(MyClassName.this);

Почему так?

Кроме того, я уже видел эту вещь в Activity, где на этот раз мы добавляем .class к названию активности, которое мы пытаемся достичь. Не могли бы вы рассказать мне о значении этих двух ключевых слов?

большое спасибо

  • 0
    Оформить заказ этот один.
  • 1
    .class используется для действия / класса, к которому вы хотите иметь доступ, а MyClassName.this на самом деле является контекстом класса MyClassName, который необходимо указать, чтобы указать приложению, где вы хотите, чтобы ваш просмотр.
Теги:
android-activity
alertdialog

4 ответа

1
Лучший ответ

Класс 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);
                 }
        });

        ...
}
  • 0
    спасибо гва, извините за вопрос, но если я назову "деятельность", которую я создал, это всего лишь класс, не так ли? (не "служба" или что-то еще, мне нужно прочитать документ об этом?) Кроме того, если я нахожусь "внутри" моего класса, и я вызываю новую активность через "Намерение", this или ActivityName.this то же самое , правильно?
  • 0
    я имею в виду: если я нахожусь внутри метода обратного вызова, Context должен вызываться моим именем класса + this, и если я нахожусь внутри моего класса, они эквивалентны? так считается ли метод "onCreateDialog" как метод обратного вызова? еще раз спасибо
Показать ещё 6 комментариев
1

Если вы хотите обратиться к внешнему классу (MyClassName который является Context в вашем примере) внутреннего класса, в котором AlertDialog.Builder, вы должны использовать MyClassName.this иначе, this будет ссылка на внутренний класс.

  • 0
    спасибо dtmilano, одна вещь: если я нахожусь в моем классе, this или MyClass.this Это то же самое, чтобы вызвать контекст?
  • 0
    Если не во внутреннем классе, они одинаковы.
Показать ещё 1 комментарий
1

как и dtmilano, AlertDialog - это вид вида, должен относиться к контексту, как и любой другой вид.

0

это ключевое слово java для доступа к переменной этого класса, у всего приложения есть контекст и который передается в действие currenlty на экране, так что написание этого или имени класса. Это означает одно и то же, когда вы хотите написать код в класс, который не является активностью и использует некоторые из функций actitvty, вы должны передать это или имя класса. Это и использовать контекст там в классе non activity

Ещё вопросы

Сообщество Overcoder
Наверх
Меню