我是Android新手,我仍然试图围绕其中的一些概念,所以如果我不得不经常要求澄清,我很抱歉。
我正在尝试覆盖/创建自己的OnClickListener
。但是,我收到这个错误,说我的班级startActivity(Intent)
未定义...我无法弄清楚为什么我会收到此错误。
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
public class ContactOCL implements OnClickListener {
String contactInfo;
public ContactOCL(String contactInfo) {
this.contactInfo = contactInfo;
}
public void onClick(View v) {
try {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + contactInfo));
startActivity(callIntent); // Error here
} catch (ActivityNotFoundException activityException) {
Log.e("Calling a Phone Number", "Call failed", activityException);
}
}
}
答案 0 :(得分:6)
由于您已经将View
传递给onClick()
,因此无需将Activity传递给封闭类。只是做:
v.getContext().startActivity(callIntent);
答案 1 :(得分:5)
要开始一项活动,您需要一项活动。
一种解决方案是将您的活动传递给您的ContactOCL类
public ContactOCL(Activity activity, String contactInfo) {
this.contactInfo = contactInfo;
this.activity = activity;
}
然后开始活动,使用
activity.startActivity(callIntent);
然后,当您创建此ContactOCL类时,可以通过添加activity参数来执行此操作,例如:new ContactOCL(this, contactInfo);
(我假设您从活动类创建ContactOCL)
编辑:虽然我的解决方案适用于一般情况,但对于这种特殊情况,没有必要这样做,因为您可以从视图中访问活动。相反,请参阅solution suggested by A--C here。
答案 2 :(得分:1)
这个类可以作为Activity
中的内部类 - 只需将其删除并删除public
类修饰符:
public class MyActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
class ContactOCL implements OnClickListener {
String contactInfo;
public ContactOCL(String contactInfo) {
this.contactInfo = contactInfo;
}
public void onClick(View v) {
try {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + contactInfo));
startActivity(callIntent); // No Error here
} catch (ActivityNotFoundException activityException) {
Log.e("Calling a Phone Number", "Call failed", activityException);
}
}
}
}