您好我是Android新手,我在活动上下文中与此关键字混淆。这是一个代码片段,只需按下按钮即可打印到屏幕上。但是工作室正在提出一个问题。
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类,需要在.
关键字之前附加类名和this
ActivityClassName.this
Toast
要么需要显示它的活动的上下文,要么需要应用程序的上下文
使用活动上下文的Toast
Toast.makeText(Activityname.this,"Button pressed",Toast.LENGTH_SHORT).show();
注意:如果你的Toast
在任何匿名类中,那么你需要使用ActivityName.this
。如果情况并非如此,那么简单地使用this
就能完成这项工作。
Toast使用应用程序上下文
Toast.makeText(getApplicationContext(),"Button pressed",Toast.LENGTH_SHORT).show();
对于短暂的吐司,你通常可以使用你想要的任何上下文。通常,您将使用活动上下文,但应用程序上下文也可以。
所以你可以使用Classname.this例如: - MainActivity.this或getApplicationContext();
基本上onClick(View v)
方法是匿名类,它实现了接口android.view.View.onClickListner
的方法,所以只有this
关键字的上下文不属于匿名类
所以你可以在按钮this
中定义Activity
关键字与相关onClickListner
的引用,如下面的代码
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
如果您使用的活动称为“MyActivity”,则可以执行以下操作:
MyActivity.this
这段代码将返回外部类的这个“当前”对象,这对你有用。
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
}
});
}