2012-04-26 35 views
1

OnItemClickListenerの実装が定義されています。これは、アプリケーション全体でいくつかのアクティビティとフラグメントで使用されています。私は現在Activityをコンストラクタに渡しているので、エラーを受け取らずにstartActivityと呼ぶことができます。これが適切なアプローチであるかどうかはわかりませんでした。共有リスナーとアクティビティインスタンスの受け渡し

私が間違っていることはありますか?

public class EventSelectedListener implements AdapterView.OnItemClickListener { 

    private Activity mActivity; 
    private Context mContext; 

    public EventSelectedListener(Activity activity) { 
     mActivity = activity; 
     mContext = mActivity.getApplicationContext(); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     Intent intent = new Intent();    
     intent.setClass(mContext, MediaPlayerActivity.class); 
     mActivity.startActivity(intent);  
    } 
} 

答えて

2

アプリケーションのコンテキストとアクティビティのコンテキストは同じではありません。あなたのコードでは、Activityのコンテキストを使用することになっています。

変更この:これに

mContext = mActivity.getApplicationContext(); 

mContext = mActivity; 

それともまた

、あなたもあなたmActivityので、別のコンテキストオブジェクトを保っについて気にする必要がいけませんすでに文脈を参照している。

public class EventSelectedListener implements AdapterView.OnItemClickListener { 

    private Activity mActivity; 

    public EventSelectedListener(Activity activity) { 
     mActivity = activity; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     Intent intent = new Intent();    
     intent.setClass(mActivity, MediaPlayerActivity.class); 
     mActivity.startActivity(intent);  
    } 
} 
+0

ありがとう:だから、単にあなたが文脈を参照する必要があり、これまでmActivityを使用しています。素晴らしい入力。 – Steve

関連する問題