java - 如何检索此 fragment 中的歌曲列表?

标签 java android android-fragments android-activity android-contentprovider

有两个错误,我都无法弄清楚原因。

  1. 无法解析方法“getContentResolver()

2.无法推断参数(在 new ArrayAdapter<>() 上)。

我希望这是从fragment获取歌曲列表的正确方法。 ?如果有更好的选择,请解释一下。谢谢

public class SongsFragment extends Fragment {

    public SongsFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment_songs, container, false);
        ListView audioView = (ListView)view.findViewById(R.id.songView);
        ArrayList<String> audioList = new ArrayList<>();
        String[] proj = {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME};
        final Cursor audioCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);

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

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

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1, audioList);
        audioView.setAdapter(adapter);

        return view;
    }

}

最佳答案

在扩展 Fragment 的类中,上下文无法获取,需要使用 getActivity() 方法。

1. 无法解析方法“getContentResolver()”

因为 Fragment 类中没有 getContentResolver 方法,需要用户上下文来访问它:

 final Cursor audioCursor = getActivity().getContentResolver().query(
                              MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
                              proj, null, null, null);

2. 无法推断参数(在新的 ArrayAdapter<>() 上)。

因为 ArrayAdapter 构造函数需要有效的 Context 作为第一个参数:

ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), 
                                         android.R.layout.simple_list_item_1, 
                                         android.R.id.text1, audioList);

关于java - 如何检索此 fragment 中的歌曲列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33579474/

相关文章:

android - 显示内容两次的 fragment

android - FragmentPagerAdapter : IllegalStateException Can't change container ID of fragment

java - 当目录有太多文件时从 FTP 检索文件

android - 第二次调用 setActive(true) 时,App 不会成为首选的 MediaButtonReceiver

java - 将物体放置在人上方 30 米处

android - 如何在android中使用onTouch事件在 Canvas 上获取文本

java - 我的 fragment 相互重叠

Java:Jersey Rest 服务 URL 映射问题

java - 手机端口0接收短信

java - 尽管有错误,你可以强制编译吗