匿名类中的活动名称是什么

时间:2017-12-25 12:57:09

标签: java android android-studio anonymous-class

您好我是 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
        }
    });
}

如何知道此关键字引用的活动或类?

4 个答案:

答案 0 :(得分:2)

在匿名类中,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();

答案 1 :(得分:1)

如果您使用的活动已调用" 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
        }
    });
}

答案 2 :(得分:1)

对于短命的祝酒词,你通常可以使用你想要的任何上下文。通常,您将使用活动上下文,但应用程序上下文也可以。

所以你可以使用Classname.this例如: - MainActivity.this或getApplicationContext();

答案 3 :(得分:1)

基本上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