Java 将参数/参数传递给OnClickListener()

Java 将参数/参数传递给OnClickListener(),java,android,onclicklistener,Java,Android,Onclicklistener,我刚接触安卓系统,我仍在努力思考其中的一些概念,所以如果我不得不要求经常澄清的话,我很抱歉 我正在尝试覆盖/创建我自己的OnClickListener。然而,我得到了这个错误,说startActivity(Intent)对于我的类是未定义的…我不明白为什么我会得到这个错误 import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import a

我刚接触安卓系统,我仍在努力思考其中的一些概念,所以如果我不得不要求经常澄清的话,我很抱歉

我正在尝试覆盖/创建我自己的
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);
        }
    }

}

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

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

public ContactOCL(Activity activity, String contactInfo) {
    this.contactInfo = contactInfo;
    this.activity = activity;
}
然后使用

activity.startActivity(callIntent)

然后,当您创建这个ContactOCL类时,您可以通过添加活动参数来完成,比如:
newcontactOCL(这个,contactInfo)(我假设您从活动类创建ContactOCL)


编辑:虽然我的解决方案适用于一般情况,但对于这种特殊情况,不必这样做,因为您可以从视图访问活动。相反,请参见。

,因为您已经将
视图
传递给了
onClick()
,所以无需将活动也传递给封闭类。只要做:

v.getContext().startActivity(callIntent);

该类将作为
活动中的内部类运行
-只需将其放入并删除
公共
类修饰符:

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

    }
}

发布你的logcat错误。巴尼:这是一个编译时错误。你的清单中声明了意图/类吗?没有人读:(startActivity不像他那样存在于普通类中。他需要访问上下文才能调用它。你不能从非活动类启动活动。+1比我有的解决方案更好。我应该对自己说:“保持简单,愚蠢”在正常情况下,你的方式就是前进的方式:-)+1。这是我通常的方式。有时我倾向于过度使用内部类:)