为什么在AlertDialog.Builder参数中添加类名?

时间:2011-12-14 02:39:16

标签: android android-activity alertdialog

AlertDialog.Builder构造函数将Context作为其参数:

AlertDialog.Builder (Context context)

我找到了一个示例,其中参数不仅是this而且是:

new AlertDialog.Builder(MyClassName.this);

为什么?

另外,我已经在Activity看到了这个问题,这次我们将.class添加到我们尝试访问的活动的名称中。你能告诉我这两个关键词的含义吗?

非常感谢

4 个答案:

答案 0 :(得分:1)

如果要引用创建MyClassName的内部类的外部类(Context,在您的示例中为AlertDialog.Builder),则必须使用{{ 1}}否则MyClassName.this将引用内部类。

答案 1 :(得分:1)

就像dtmilano所说的那样,AlertDialog是一种View,应该像其他View一样引用上下文。

答案 2 :(得分:1)

类Activity是Context的子类,因此您可以在示例中将其用作参数。 现在,例如,如果您在onClick方法(即按钮)内部或内部类或asynctask内部,使用“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);
                 }
        });

        ...
}

答案 3 :(得分:0)

这是访问此类变量的java关键字 整个应用程序有一个上下文,并传递给屏幕上的活动当前 所以写这个或类名。这意味着同一件事 当你想在一个不是活动的类中编写一些代码并使用一些actitvty函数时 你应该传递这个或类名。这个并在非活动类中使用上下文