匿名 class 中的 activity 名字是什么
what is the activity name in anonymous class
您好,我是 android 的新手,我对 activity 上下文中的这个关键字感到困惑。这是一个代码片段,当按下按钮时,它会简单地打印到屏幕上。但是工作室提出了一个问题。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("My app","onCreate is called");
Toast1("onCreate");
Button btn=(Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("My app","Button is pressed");
Toast.makeText(this,"Button pressed",Toast.LENGTH_SHORT).show();//Here is a error
}
});
}
如何知道 this 关键字引用的是 activity 还是 class?
匿名class里面,this
指的是匿名class的区块。要引用包含匿名 class 的 Activity class,您需要在 this
关键字前附加 class 名称和 .
ActivityClassName.this
Toast
要么需要显示它的 activity 的上下文,要么需要应用程序的上下文
Toast 使用 activity 上下文
Toast.makeText(Activityname.this,"Button pressed",Toast.LENGTH_SHORT).show();
注意:如果你的Toast
在任何匿名class中,那么你需要使用ActivityName.this
。如果不是这种情况,只需使用 this
即可。
使用应用程序上下文吐司
Toast.makeText(getApplicationContext(),"Button pressed",Toast.LENGTH_SHORT).show();
如果您使用的 activity 名为“MyActivity”,那么您可以执行以下操作:
MyActivity.this
这段代码将 return 外部 class 的 this "current" 对象
这对你有用。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("My app","onCreate is called");
Toast1("onCreate");
Button btn=(Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("My app","Button is pressed");
Toast.makeText(MyActivity.this
,"Button pressed",Toast.LENGTH_SHORT).show();//here is the working code for you
}
});
}
对于短暂的 toasts,您通常可以使用任何您想要的上下文。通常,您会使用 activity 上下文,但应用程序上下文也可以。
因此您可以使用 Classname.this 例如:- MainActivity.this 或 getApplicationContext();
基本上onClick(View v)
方法是匿名的class实现接口方法android.view.View.onClickListner
所以只有this
上下文关键字不属于匿名class
因此您可以在按钮 onClickListner
中使用相关 Activity
定义 this
关键字的引用,如下面的代码
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("My app","Button is pressed");
Toast.makeText(MainActivity.this,"Button pressed",Toast.LENGTH_SHORT).show(); //Change here
}
});
查看更多参考资料this link
您好,我是 android 的新手,我对 activity 上下文中的这个关键字感到困惑。这是一个代码片段,当按下按钮时,它会简单地打印到屏幕上。但是工作室提出了一个问题。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("My app","onCreate is called");
Toast1("onCreate");
Button btn=(Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("My app","Button is pressed");
Toast.makeText(this,"Button pressed",Toast.LENGTH_SHORT).show();//Here is a error
}
});
}
如何知道 this 关键字引用的是 activity 还是 class?
匿名class里面,this
指的是匿名class的区块。要引用包含匿名 class 的 Activity class,您需要在 this
关键字前附加 class 名称和 .
ActivityClassName.this
Toast
要么需要显示它的 activity 的上下文,要么需要应用程序的上下文
Toast 使用 activity 上下文
Toast.makeText(Activityname.this,"Button pressed",Toast.LENGTH_SHORT).show();
注意:如果你的Toast
在任何匿名class中,那么你需要使用ActivityName.this
。如果不是这种情况,只需使用 this
即可。
使用应用程序上下文吐司
Toast.makeText(getApplicationContext(),"Button pressed",Toast.LENGTH_SHORT).show();
如果您使用的 activity 名为“MyActivity”,那么您可以执行以下操作:
MyActivity.this
这段代码将 return 外部 class 的 this "current" 对象 这对你有用。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("My app","onCreate is called");
Toast1("onCreate");
Button btn=(Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("My app","Button is pressed");
Toast.makeText(MyActivity.this
,"Button pressed",Toast.LENGTH_SHORT).show();//here is the working code for you
}
});
}
对于短暂的 toasts,您通常可以使用任何您想要的上下文。通常,您会使用 activity 上下文,但应用程序上下文也可以。
因此您可以使用 Classname.this 例如:- MainActivity.this 或 getApplicationContext();
基本上onClick(View v)
方法是匿名的class实现接口方法android.view.View.onClickListner
所以只有this
上下文关键字不属于匿名class
因此您可以在按钮 onClickListner
中使用相关 Activity
定义 this
关键字的引用,如下面的代码
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("My app","Button is pressed");
Toast.makeText(MainActivity.this,"Button pressed",Toast.LENGTH_SHORT).show(); //Change here
}
});
查看更多参考资料this link