2017-01-06 14 views
-1

Numbers.javaファイルに顧客OnclickListenerを作成しようとしています。顧客を作成するOnClickListener

私のコードは

import android.content.Intent; 
import android.view.View; 
import android.widget.Toast; 

/** 
* Created by Max on 06.01.2017. 
*/ 

public class Numbers implements View.OnClickListener { 
    @Override 
    public void onClick (View view){ 
     Intent IntentEmail = new Intent(Intent.ACTION_SEND); 
     IntentEmail.setType("message/rfc822"); 
     IntentEmail.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); 
     if (IntentEmail.resolveActivity(getPackageManager())!= null){ 
      startActivity(IntentEmail); 
     } 
    } 
} 

あるしかし、それはそれは方法startActivitygetPackageManagerを解決できないと言われます。

MainActivity.javaOnClickListenerをインラインで作成すると機能します。 何が問題なのでしょうか?

ありがとうございました!

答えて

2

StartActivityは、Contextクラスのメソッドです。あなたのNumberクラスはContextを拡張していないので、このメソッドにアクセスすることはできません。 getPackageManagerの場合も同じです。

あなたがそこにメソッドを使用することができますので、あなたがMainActivityオブジェクトを参照しているので、あなたは、MainActivityコンテキストにあるMainActivityOnClickListenerインラインを作成します。

+0

はあなたに感謝!上と下の答えで私は私の問題を理解する! – JohnDoe

4

これらの方法は、Contextクラスからのものです。だからあなたはそれらを呼び出すことができません。 Context (Activity or Service)を拡張するクラスからのみ呼び出すことができます。あなたができることは、Viewのコンテキストを使用することです。このよう

import android.content.Intent; 
import android.view.View; 
import android.widget.Toast; 

/** 
* Created by Max on 06.01.2017. 
*/ 

public class Numbers implements View.OnClickListener { 
    @Override 
    public void onClick (View view){ 
     Context context = view.getContext(); 
     Intent IntentEmail = new Intent(Intent.ACTION_SEND); 
     IntentEmail.setType("message/rfc822"); 
     IntentEmail.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); 
     if (IntentEmail.resolveActivity(context.getPackageManager())!= null){ 
      context.startActivity(IntentEmail); 
     } 
    } 
} 
+0

どうもありがとうございました! – JohnDoe

1

startActivitygetPackageManager両方の方法はContextクラスからあるので、それをアクセスするために、Contextクラスのインスタンスを使用する必要があります。

MainActivity.javaにOnclickListener inlineを作成すると、 が動作します。何が問題なの?

ActivityContextクラスのサブクラスであるので、我々はthisを使用してContextクラスのすべてのメソッドにアクセスすることができますので。

ソリューション:

すべてのビュー・インスタンスから、私たちはgetContext()を呼び出して、現在有効なContextを得ることができます。

だから、両方methods.likeにアクセスするためにonClick方法のviewパラメータを使用します。

view.getContext().startActivity(IntentEmail); 
+0

ありがとうございます!非常に役立ちます。あなたの答えを最初の答えと組み合わせて使用​​してください! – JohnDoe

関連する問題