@Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Map<String, String> map = mLocalMusicAdapter.getItem(position); // 取得铃声名 String ringName = map.get(WeacConstants.RING_NAME); // 取得播放地址 String ringUrl = map.get(WeacConstants.RING_URL); // 更新当前铃声选中的位置 mLocalMusicAdapter.updateSelection(ringName); // 更新适配器刷新铃声列表显示 mLocalMusicAdapter.notifyDataSetChanged(); // 设置最后一次选中的铃声选择界面位置为本地音乐界面 RingSelectItem.getInstance().setRingPager(1); // 播放音频文件 AudioPlayer.getInstance(getActivity()).play(ringUrl, false, false); ViewPager pager = (ViewPager) getActivity().findViewById(R.id.fragment_ring_select_sort); PagerAdapter f = pager.getAdapter(); SystemRingFragment systemRingFragment = (SystemRingFragment) f.instantiateItem(pager, 0); RecorderFragment recorderFragment = (RecorderFragment) f.instantiateItem(pager, 2); // 取消系统铃声选中标记 if (systemRingFragment.mSystemRingAdapter != null) { systemRingFragment.mSystemRingAdapter.updateSelection(""); systemRingFragment.mSystemRingAdapter.notifyDataSetChanged(); } // 取消录音选中标记 if (recorderFragment.mRecorderAdapter != null) { recorderFragment.mRecorderAdapter.updateSelection(""); recorderFragment.mRecorderAdapter.notifyDataSetChanged(); } }
@Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { switch (loader.getId()) { case LOADER_ID: // 当为编辑闹钟状态时,铃声名为闹钟单例铃声名 String ringName1; if (RingSelectFragment.sRingName != null) { ringName1 = RingSelectFragment.sRingName; } else { SharedPreferences share = getActivity() .getSharedPreferences(WeacConstants.EXTRA_WEAC_SHARE, Activity.MODE_PRIVATE); // 当为新建闹钟状态时,铃声名为最近一次选择保存的铃声名 ringName1 = share.getString(WeacConstants.RING_NAME, ""); } // 保存铃声信息的List List<Map<String, String>> list = new ArrayList<>(); // 过滤重复音频文件的Set HashSet<String> set = new HashSet<>(); if (cursor != null) { for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { // 音频文件名 String ringName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); // 取得音频文件的地址 String ringUrl = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); if (ringName != null) { // 当过滤集合里不存在此音频文件,并且文件扩展名不为[.amr],并且不是默认铃声 if (!set.contains(ringName) && !ringUrl.contains("/WeaAlarmClock/audio/record") && !ringName.equals("record_start.mp3") && !ringName.equals("record_stop.mp3") && !ringName.equals("ring_weac_alarm_clock_default.mp3")) { // 添加音频文件到列表过滤同名文件 set.add(ringName); // 去掉音频文件的扩展名 ringName = MyUtil.removeEx(ringName); Map<String, String> map = new HashMap<>(); map.put(WeacConstants.RING_NAME, ringName); map.put(WeacConstants.RING_URL, ringUrl); list.add(map); // 当列表中存在与保存的铃声名一致时,设置该列表的显示位置 if (ringName.equals(ringName1)) { mPosition = list.size() - 1; RingSelectItem.getInstance().setRingPager(1); } } } } } mLocalMusicAdapter = new RingSelectAdapter(getActivity(), list, ringName1); setListAdapter(mLocalMusicAdapter); setSelection(mPosition); break; } }