共享侦听器并在活动实例中传递

时间:2012-04-26 14:14:28

标签: java android

我定义了一个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);       
    }
}

1 个答案:

答案 0 :(得分: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);       
    }
}