0

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

}
4

3 回答 3

6

由于您已经View传递了 to onClick(),因此无需将 Activity 也传递给封闭类。做就是了:

v.getContext().startActivity(callIntent);
于 2013-02-27T22:19:55.370 回答
5

要开始一项活动,您需要一项活动。

一种解决方案是将您的活动传递给您的 ContactOCL 类

public ContactOCL(Activity activity, String contactInfo) {
    this.contactInfo = contactInfo;
    this.activity = activity;
}

然后开始活动,你使用

activity.startActivity(callIntent);

然后,当您创建此 ContactOCL 类时,您可以通过添加活动参数来做到这一点,例如:(new ContactOCL(this, contactInfo);我假设您从活动类创建 ContactOCL)

编辑:虽然我的解决方案适用于一般情况,但对于这种特殊情况,没有必要这样做,因为您可以从视图中访问活动。相反,请参阅A--C here 建议的解决方案

于 2013-02-27T22:17:13.283 回答
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);
            }
        }

    }
}
于 2013-02-27T22:31:42.850 回答