创建客户OnClickListener

时间:2017-01-06 12:32:34

标签: java android onclicklistener

尝试在OnclickListener文件中创建客户Numbers.java

我的代码是

import android.content.Intent;
import android.view.View;
import android.widget.Toast;

/**
 * Created by Max on 06.01.2017.
 */

public class Numbers implements View.OnClickListener {
    @Override
    public void onClick (View view){
        Intent IntentEmail = new Intent(Intent.ACTION_SEND);
        IntentEmail.setType("message/rfc822");
        IntentEmail.putExtra(Intent.EXTRA_EMAIL, new String[]{"mailto@gmail.com"});
        if (IntentEmail.resolveActivity(getPackageManager())!= null){
            startActivity(IntentEmail);
        }
    }
}

但是,它告诉我它无法解决方法startActivitygetPackageManager

当我在OnClickListener中创建MainActivity.java内联时,它有效。 可能是什么问题?

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

这些方法来自Context类。这就是你无法打电话给他们的原因。您只能从扩展Context (Activity or Service)的类中调用它。你可以做的是使用View中的上下文。

像这样:

import android.content.Intent;
import android.view.View;
import android.widget.Toast;

/**
 * Created by Max on 06.01.2017.
 */

public class Numbers implements View.OnClickListener {
    @Override
    public void onClick (View view){
        Context context = view.getContext();
        Intent IntentEmail = new Intent(Intent.ACTION_SEND);
        IntentEmail.setType("message/rfc822");
        IntentEmail.putExtra(Intent.EXTRA_EMAIL, new String[]{"mailto@gmail.com"});
        if (IntentEmail.resolveActivity(context.getPackageManager())!= null){
            context.startActivity(IntentEmail);
        }
    }
}

答案 1 :(得分:2)

StartActivityContext类的方法。您的号码类未延伸Context,因此您无法访问此方法。 getPackageManager也是如此。

当您在OnClickListener内置MainActivity内联MainActivity内联时,您可以使用那里的方法,因为您指的是MainActivity对象。< / p>

答案 2 :(得分:1)

startActivitygetPackageManager这两个方法都来自Context类,因此需要使用Context类实例来访问它。

  

当我在MainActivity.java中内联创建OnclickListener时   作品。可能是什么问题?

因为ActivityContext类的子类,所以我们可以使用this从Context类访问所有方法。

解决方案:

通过调用getContext(),我们可以从每个View实例中获取当前有效Context

因此,使用view方法的onClick参数来访问这两种方法。似乎:

view.getContext().startActivity(IntentEmail);