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

时间:2013-02-27 22:13:06

标签: java android onclicklistener

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

}

3 个答案:

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

    }
}