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渡されているonClick()ため、Activity を外側のクラスにも渡す必要はありません。ただ行う:

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

アクティビティを開始するには、アクティビティが必要です。

1 つの解決策は、アクティビティを ContactOCL クラスに渡すことです。

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

次に、アクティビティを開始するには、次を使用します

activity.startActivity(callIntent);

次に、この ContactOCL クラスを作成するときに、次のようなアクティビティ パラメータを追加しnew ContactOCL(this, contactInfo);ます (アクティビティ クラスから ContactOCL を作成すると想定しています)。

編集:私のソリューションは一般的なケースで機能しますが、この特別なケースでは、ビューからアクティビティにアクセスできるため、このようにする必要はありません。代わりに、ここで A--C によって提案された解決策を参照してください。

于 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 に答える