AlertDialog.Builder构造函数将Context作为其参数:
AlertDialog.Builder (Context context)
,
我找到了一个示例,其中参数不仅是this
而且是:
new AlertDialog.Builder(MyClassName.this);
为什么?
另外,我已经在Activity
看到了这个问题,这次我们将.class
添加到我们尝试访问的活动的名称中。你能告诉我这两个关键词的含义吗?
非常感谢
答案 0 :(得分:1)
如果要引用创建MyClassName
的内部类的外部类(Context
,在您的示例中为AlertDialog.Builder
),则必须使用{{ 1}}否则MyClassName.this
将引用内部类。
答案 1 :(得分:1)
答案 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函数时 你应该传递这个或类名。这个并在非活动类中使用上下文