2012-04-26 60 views
1

我有一個OnItemClickListener實現定義,我在我的應用程序中使用了幾個Activities和Fragment。我目前在構造函數中傳遞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的上下文不是同一回事。在你的代碼中,你應該使用Activity的上下文。

更改此:

mContext = mActivity.getApplicationContext(); 

要這樣:

mContext = mActivity; 

或者

或者,你甚至無需考慮保持獨立的上下文對象,因爲你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

謝謝。偉大的投入。 – Steve 2012-04-26 14:24:44