Android 使用EventBus onClick将ListView中项目的Uri发送到片段
是否有一种方法可以注册listView项的onClick事件,而无需通过startActivity发送意图,而只需使用EventBus发送和事件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
@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);
}