Android 使用EventBus onClick将ListView中项目的Uri发送到片段

Android 使用EventBus onClick将ListView中项目的Uri发送到片段,android,listview,android-fragments,greenrobot-eventbus,Android,Listview,Android Fragments,Greenrobot Eventbus,是否有一种方法可以注册listView项的onClick事件,而无需通过startActivity发送意图,而只需使用EventBus发送和事件 @Override public void onClickListener(AdapterView<?> av,View v, int position, long id){ cursor.moveToPosition(position); String st = cursor.getString(c

是否有一种方法可以注册listView项的onClick事件,而无需通过startActivity发送意图,而只需使用EventBus发送和事件

@Override
    public void onClickListener(AdapterView<?> av,View v, int position, long id){
        cursor.moveToPosition(position);
        String st = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
        Uri uri = Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)));
        Log.d("item slected",st);
        MusicPlayerEvent playerevent = new MusicPlayerEvent(uri);
        EventBus.getDefault().post(playerevent);
    }
事件类别:

public class MusicPlayerEvent {
    Uri uri;
    MusicPlayerEvent(Uri uri){
        this.uri = uri;
    }
}

我肯定这里有很多问题,但我想至少了解一下我正在尝试做的事情是否可行,也许是一些相关示例或阅读的指针。在尝试使用EventBus之前,我可能应该更熟悉常规的意图,但如果我能先学习更灵活的选项,那就太好了。

我应该发布我的活动的其余部分。我想如果我有,这个问题会更容易回答。我以后不会犯那样的错误。我正在使用列表活动。。因此,对我们来说,正确的方法是onListItemClick

@Override
    public void onListItemClick(ListView parent,View v, int position, long id){
        cursor.moveToPosition(position);
        String st = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
        Uri uri = Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)));
        Log.d("item slected",st);
        MusicPlayerEvent playerevent = new MusicPlayerEvent(uri);
        EventBus.getDefault().post(playerevent);
    }

我在代码中没有看到错误。除了一件事。您可能希望使用相反的方法注册/注销EventBus,如onCreate/onDestroy或onAttach/OnDetch,具体取决于您要完成的任务。就这样。当您发布事件时,siply会在订阅服务器中找到一个事件(EventType)并调用它。只要您在UI线程中工作,就不会出现任何问题。@Fedor Kazakov感谢您的回复,我认为它应该可以工作,除了我的onClickListener“不会从它的超类重写方法”
@Override
    public void onListItemClick(ListView parent,View v, int position, long id){
        cursor.moveToPosition(position);
        String st = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
        Uri uri = Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)));
        Log.d("item slected",st);
        MusicPlayerEvent playerevent = new MusicPlayerEvent(uri);
        EventBus.getDefault().post(playerevent);
    }