зачем добавлять имя класса в параметре AlertDialog.Builder? - PullRequest
1 голос
/ 14 декабря 2011

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

AlertDialog.Builder (Context context),

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

new AlertDialog.Builder(MyClassName.this);

Почему это?

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

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

Ответы [ 4 ]

1 голос
/ 14 декабря 2011

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

1 голос
/ 14 декабря 2011

Класс Activity является подклассом Context, поэтому вы можете использовать его в качестве параметра в своем примере. Теперь, если, например, вы находитесь внутри метода onClick (т.е. кнопки) или внутри внутреннего класса или асинхронной задачи, использование «this» не будет ссылаться на само действие, поэтому вам нужно использовать YourActivity.this.

Вместо этого, когда вы видите ClassName.class, обычно это происходит потому, что вам нужно указать, какую деятельность, службу или что вы хотите запустить, в этом случае тип параметра - 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);
                 }
        });

        ...
}
1 голос
/ 14 декабря 2011

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

0 голосов
/ 21 декабря 2011

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

...