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);       
    }
}
4

1 回答 1

2

应用程序的上下文和活动的上下文不是一回事。在您的代码中,您应该使用 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);       
    }
}
于 2012-04-26T14:20:40.643 回答