有两个错误,我都无法弄清楚原因。
- 无法解析方法“
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/