首页 > 解决方案 > 如何在列表中设置 OnItemClickListner 以播放音频

问题描述

我是 android 新手,请帮我在片段中单击列表项播放音频。我正在使用此代码,但在单击项目时,我的应用程序崩溃显示错误。

我已经尝试了以下代码,但我的应用程序在单击项目时崩溃:

public class FragmentOne extends Fragment {

        static MediaPlayer mediaPlaye;
        int audioIndex;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View view=inflater.inflate(R.layout.fragment_fragment_one, container, false);

            ListView audioView = view.findViewById(R.id.listview1);
            final ArrayList<String> audioList = new ArrayList<>();

            String[] proj = {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME};
            final Cursor audioCursor = getActivity().getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);

            if (audioCursor != null) {
                if (audioCursor.moveToFirst()) {
                    do {
                        audioIndex = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);

                        audioList.add(audioCursor.getString(audioIndex));
                    } while (audioCursor.moveToNext());
                }
            }
            audioCursor.close();

            final ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),R.layout.tectcolor, audioList);

            audioView.setAdapter(adapter);

            audioView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    Uri u = Uri.parse(audioList.get(i).toString());
                    mediaPlaye = MediaPlayer.create(getContext(), u);
                    mediaPlaye.start();
                }
            });

            return view;
        }
    }

我期望在片段中单击项目时播放音频。

标签: javaandroid

解决方案


您必须在您的自定义适配器中设置 Onclick。

当您在您的列表上设置 onClick 时,Android 会检查您对列表的所有视图,这将导致崩溃。

创建一个适配器并在那里覆盖 onClick 。

有很好的编码...


推荐阅读