getItem() 如何在 android 开发人员的示例通用音乐播放器应用程序中真正发挥作用?

How does getItem() really work in android developer's sample universal music player app?

我想在这里了解android提供的通用音乐播放器的源代码:https://github.com/googlesamples/android-UniversalMusicPlayer

但是,我不明白他们如何使用浏览器适配器来使用 MediaItem 填充列表。部分代码在这里:

private static class BrowseAdapter extends ArrayAdapter<MediaBrowser.MediaItem> {

        public BrowseAdapter(Activity context) {
            super(context, R.layout.media_list_item, new ArrayList<MediaBrowser.MediaItem>());
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            MediaBrowser.MediaItem item = getItem(position);
            System.out.println("Item: "+item);
            int itemState = MediaItemViewHolder.STATE_NONE;
            if (item.isPlayable()) {
                itemState = MediaItemViewHolder.STATE_PLAYABLE;
                MediaController controller = ((Activity) getContext()).getMediaController();
                if (controller != null && controller.getMetadata() != null) {
                    String currentPlaying = controller.getMetadata().getDescription().getMediaId();
                    String musicId = MediaIDHelper.extractMusicIDFromMediaID(
                            item.getDescription().getMediaId());
                    if (currentPlaying != null && currentPlaying.equals(musicId)) {
                        PlaybackState pbState = controller.getPlaybackState();
                        if (pbState == null || pbState.getState() == PlaybackState.STATE_ERROR) {
                            itemState = MediaItemViewHolder.STATE_NONE;
                        } else if (pbState.getState() == PlaybackState.STATE_PLAYING) {
                            itemState = MediaItemViewHolder.STATE_PLAYING;
                        } else {
                            itemState = MediaItemViewHolder.STATE_PAUSED;
                        }
                    }
                }
            }
            return MediaItemViewHolder.setupView((Activity) getContext(), convertView, parent,
                item.getDescription(), itemState);
        }
    }

在 getView 的第一行,getItem() 是如何知道要查找哪个 list/array 来检索指定 'position' 处的数据的?通常对于列表适配器,我们传入一个数组,其中已经有元素,但在这个例子中,他们创建了一个新的 ArrayList,所以它应该是 empty.So getItem() 如何从一个空的 ArrayList 中检索?还是从其他地方检索 MediaItem?

谢谢。

BrowseAdapter 的构造函数调用父构造函数 (see ArrayAdapter.java lines 154-164). The parent constructor creates a list of items (see lines 175-182)。

项目被添加到适配器,适配器将它们添加到列表 (MediaBrowserFragment lines 119-121). getItem(int position) then returns the item in the list (see 343-345)。