2012-02-04 13 views
2

まずToast.makeTextの形式():Toast.makeText(getApplicationContext()、 "String"、Toast.LENGTH_LONG); ==> getApplicationContext()は "this"に変更できません。

public static Toast makeText (Context context, CharSequence text, int duration) 最初の引数はコンテキストで、機能getApplicationContext()も現在のコンテキストを返し、すべてが、okですが、IMO getApplicationContext()も、次のと同じように、これを置き換えることができます。

public class ContextMenuResourcesActivity extends Activity { 
    /** Called when the activity is first created. */ 

    private Button b1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    b1 = (Button)findViewById(R.id.button1); 
    final int l = Toast.LENGTH_LONG; 
    final String s1 = "some string"; 
    b1.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Toast t1 = Toast.makeText(this, s1, l); 
       t1.show(); 
      } 
     }); 
    } 
} 
それは コンテキストの需要最初の引数を置き換えることができますが、私は誰もが理由を説明することができ、失敗したので、 Contextを拡張するクラス ContextMenuResourcesActivity、0

IMO thisスタンド?

答えて

5

新しいOnClickListenerを作成すると、特定のインターフェイスを実装する匿名クラスが作成されます。したがって、実際に別のオブジェクトにあるため、thisActivityを参照しません。

はここで対象これはOnClickListenerのインスタンスを示している。この場合、IinはAnonymous classes vs delegates

+0

ありがとう、私は前に匿名のクラスを考慮しませんでした。 – Searene

0

にいくつかの詳細情報です、ビュー、またはその他のUIのものを作成するために、あなたはコンテキストを取得する必要があり、これは、以下の異なる方法で行うことができます。

getApplicationContext(); 
ContextMenuResourcesActivity.this; 
v.getContext(); 
-1

新しいOnClickListner()は、onclickインターフェイスを実装する匿名クラスです。これは、匿名クラスのインスタンスを参照します。むしろ "Your_Activity_Name.this"を使用して、あなたの活動の現在の文脈を参照してください。

関連する問題