Recycler 视图中的媒体播放器在下一个 Recyclerview 项目中播放媒体
Media player in Recycler view plays media in next Recyclerview Item
我有一个由来自服务器的数据填充的回收器视图...
//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 种不同的布局变体,我设法将其整理出来 。
问题是作为其中一些项目的一部分,我有视频和音频、媒体项目。
所以在我的 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);
}
});
}
}
}
问题是,当我点击第一个项目的播放按钮时,音频将在第二个项目上通过媒体控制器等播放。我认为这个问题是因为同时绑定了两个 viewholders,当我单击播放按钮时,它是与之一起使用的第二个视图持有者。
我不确定这是否是问题所在,但如果有人可以帮助我,我将不胜感激或需要查看更多代码,请告诉我
mMediaPlayer 是 class 成员,每次调用绑定视图持有者时都会更新。因此,无论何时 mMediaPlayer 都会从上次 bindViewHolder 调用中保留对 mediaPlayer 的引用。
使其在本地绑定视图持有者并尝试查看您的错误是否已修复。
请检查它是否已被修复。
我有一个由来自服务器的数据填充的回收器视图...
//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 种不同的布局变体,我设法将其整理出来
问题是作为其中一些项目的一部分,我有视频和音频、媒体项目。
所以在我的 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);
}
});
}
}
}
问题是,当我点击第一个项目的播放按钮时,音频将在第二个项目上通过媒体控制器等播放。我认为这个问题是因为同时绑定了两个 viewholders,当我单击播放按钮时,它是与之一起使用的第二个视图持有者。
我不确定这是否是问题所在,但如果有人可以帮助我,我将不胜感激或需要查看更多代码,请告诉我
mMediaPlayer 是 class 成员,每次调用绑定视图持有者时都会更新。因此,无论何时 mMediaPlayer 都会从上次 bindViewHolder 调用中保留对 mediaPlayer 的引用。 使其在本地绑定视图持有者并尝试查看您的错误是否已修复。 请检查它是否已被修复。