尝试在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);
}
}
}
但是,它告诉我它无法解决方法startActivity
和getPackageManager
。
当我在OnClickListener
中创建MainActivity.java
内联时,它有效。
可能是什么问题?
感谢您的帮助!
答案 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)
StartActivity
是Context
类的方法。您的号码类未延伸Context
,因此您无法访问此方法。 getPackageManager
也是如此。
当您在OnClickListener
内置MainActivity
内联MainActivity
内联时,您可以使用那里的方法,因为您指的是MainActivity
对象。< / p>
答案 2 :(得分:1)
startActivity和getPackageManager这两个方法都来自Context
类,因此需要使用Context类实例来访问它。
当我在MainActivity.java中内联创建OnclickListener时 作品。可能是什么问题?
因为Activity
是Context
类的子类,所以我们可以使用this
从Context类访问所有方法。
解决方案:
通过调用getContext(),我们可以从每个View实例中获取当前有效Context
。
因此,使用view
方法的onClick
参数来访问这两种方法。似乎:
view.getContext().startActivity(IntentEmail);