Dan*_*ira 19 android recycle android-layout android-viewholder android-recyclerview
我的问题是:我在RecyclerView内的其中一个视图上发生了视频流.
当用户滚动时,视图将被回收,其他摄像头会在该回收的视图持有者上开始自己的流式传输.这对用户界面不利,因为流式处理需要几秒钟才能启动.
我怎么能对RecyclerView说:"嘿嘿回收器,请不要回收那个确切的位置x并给出那个位置总是与你第一次给出的相同的观察者,而不是随机的一个"?
请有人帮帮我=(
Dar*_*ish 16
在您getItemViewType(int position)的适配器方法中,为每个视频分配唯一值,因此它将始终为同一视频返回相同的ViewHolder.
我希望你明白这个主意.欢呼:)
@Override
public int getItemViewType(int position) {
// Just as an example, return 0 or 2 depending on position
// Note that unlike in ListView adapters, types don't have to be contiguous
if(dataList.get(position).isVideo()){
return position;
}else{
return -1;//indicates general type, if you have more types other than video, you can use -1,-2,-3 and so on.
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case -1: View view1 = LayoutInflater.from(parent.getContext())
.inflate(R.layout.general_item, parent, false);
return new GeneralViewHolder(view1);
default:View view2 = LayoutInflater.from(parent.getContext())
.inflate(R.layout.video_item, parent, false);
return new VideoViewHolder(view2);
}
}
Run Code Online (Sandbox Code Playgroud)
azi*_*ian 13
执行viewHolder.setIsRecyclable(false)对ViewHolder你想不被回收.
来自ViewHolder的文档#setIsRecyclable(boolean):
通知回收商是否可以回收此物品.在setIsRecyclable()稍后设置为true之前,不可再循环的视图将不会重用于其他项目.
这将导致只ViewHolder创建一个.
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
...
@Override
public void onViewAttachedToWindow(final RecyclerView.ViewHolder holder) {
if (holder instanceof VideoViewHolder) {
holder.setIsRecyclable(false);
}
super.onViewAttachedToWindow(holder);
}
@Override
public void onViewDetachedFromWindow(final RecyclerView.ViewHolder holder) {
if (holder instanceof VideoViewHolder){
holder.setIsRecyclable(true);
}
super.onViewDetachedFromWindow(holder);
}
...
}
Run Code Online (Sandbox Code Playgroud)
当RecyclerView包含一次未在屏幕上显示的列表时,它会多次使用一个视图(意味着一个列表包含大量项目,这些项目在您需要上下滚动时不会同时显示在屏幕上)。当用户滚动列表时,屏幕外项目将被重用以显示其余列表项目,这称为回收。
要停止回收项目,请在您的onBindViewHolder方法中调用此方法:
viewHolder.setIsRecyclable(false);
Run Code Online (Sandbox Code Playgroud)
此语句停止回收视图。
要开始回收项目,请在您的onBindViewHolder方法中调用此方法:
viewHolder.setIsRecyclable(true);
Run Code Online (Sandbox Code Playgroud)
我希望这能解决您的问题。谢谢
| 归档时间: |
|
| 查看次数: |
20326 次 |
| 最近记录: |