0

startActivity を介してインテントを送信せずに listView アイテムの onClick イベントを登録する方法はありますか?代わりに、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 MusicPlayer extends Fragment {
    MediaPlayer mp;
    public MusicPlayer() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventBus.getDefault().register(this);
        mp = new MediaPlayer();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_music_player, container, false);
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        EventBus.getDefault().unregister(this);
        super.onDetach();
    }
    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(Uri uri);
    }
    public void onEvent(MusicPlayerEvent playerevent){
        try {
            mp.setDataSource(this.getActivity(), playerevent.uri);
            mp.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        mp.start();
    }

}

イベントクラス:

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

ここには多くの問題があると確信していますが、少なくとも私がやろうとしていることが可能かどうか、そしておそらくいくつかの関連する例や読書へのポインタを知りたいと思います. EventBus を使用する前に、通常のインテントに慣れる必要があるかもしれませんが、より柔軟なオプションを最初に学ぶことができれば、それは素晴らしいことです。

4

1 に答える 1

0

残りの活動を投稿するべきでした。あればもっと答えやすかったと思います。私は将来その間違いを犯しません。リスト アクティビティを使用しています。そのため、適切な方法は 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);
    }
于 2014-11-08T12:59:59.100 に答える