【问题标题】:Media player in Recycler view plays media in next Recyclerview ItemRecycler 视图中的媒体播放器在下一个 Recyclerview 项目中播放媒体
【发布时间】:2015-11-20 08:39:06
【问题描述】:

我有一个由服务器数据填充的回收站视图...

    //Instantiate the list
    final RecyclerView feed_list = (RecyclerView)view.findViewById(R.id.feed_list);
    //Create instance of Linear Layout Manager
    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    //Apply Layout Manager to RecyclerView
    feed_list.setLayoutManager(llm);
    //Set fixed size
    feed_list.setHasFixedSize(true);

    ContentFeedAdapter adapter = new ContentFeedAdapter(getActivity(),iContentPage.getContent());
                feed_list.setAdapter(adapter);

回收站视图有 10 种不同的布局变化,我设法将其整理到 this answer

问题是作为其中一些项目的一部分,我有视频和音频、媒体项目。

所以在我的 onBindViewHolder 方法中,如果它是一个媒体项目,我会创建一个自定义媒体播放器的实例

    @Override
    public void onBindViewHolder(final AbstractHolder holder, int position) {
        final IFeedContent content = mFeedContentList.get(position);
        holder.bindData(content);


        if(content.getMedia()!=null){
            String mimeType = content.getMedia().getMimeType();
            if(mimeType.contains("video") || mimeType.contains("audio")){
                final ProgressBar progressBar = holder.getProgress();
                final ImageView playButton = holder.getPlayImage();
                mMediaPlayer = holder.getMediaPlayer();

                playButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mMediaPlayer.startVideo(content.getMedia().getMediaUrl());
                        holder.getPlayImage().setVisibility(View.GONE);
                        progressBar.setVisibility(View.VISIBLE);
                    }
                });
            }
        }
}

问题是,当我单击第一项上的播放按钮时,音频将在第二项与媒体控制器等一起播放。我认为当我点击播放按钮,它是第二个使用的视图持有者。

我不确定这是否是问题,但如果有人可以帮助我,我将不胜感激或需要查看更多代码,请告诉我

【问题讨论】:

  • 如果你直接从 holder 对象而不是 getPlayImage() 中访问 playimage 会怎样。这有什么关系吗?
  • @Ramesh 恐怕没什么区别
  • mMediaPlayer 是班级成员吗?每当更新 bindViewHolder 时,都会更新 mMediaPlayer。所以它将引用最后一个调用的 bindViewHolder。我怀疑这是原因!

标签: android android-mediaplayer android-recyclerview android-viewholder


【解决方案1】:

作为类成员的 mMediaPlayer 在每次绑定视图持有者调用时都会更新。因此,每当 mMediaPlayer 将从最后一次 bindViewHolder 调用中保留对 mediaPlayer 的引用时。 使其成为本地绑定视图持有者并尝试查看您的错误是否已修复。 请检查它是否得到修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多