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

最佳答案

应用程序的上下文和活动的上下文不是同一回事。在您的代码中,您应该使用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);
    }
}

10-02 04:21