【问题标题】:2 view holder in recycler adapter2 回收适配器中的视图支架
【发布时间】:2018-06-03 06:37:47
【问题描述】:

我是安卓开发新手。很抱歉,如果这是一个无用的问题。我有RecyclerView,我想在RecyclerView 中显示来自Firebase 的图像和视频。

我有两个ViewHolder。我想要的是,适配器来检查帖子“类型”。如果
1)"type"=photo。我想给PhotoViewHolder充气。
2) 如果 "type"= video 我想充气 VideoHolder

我怎样才能做到这一点?。请帮帮我!

我已经用谷歌搜索了几个小时,我得到了这段代码,它只会让 VideoHolder 膨胀

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    //findViewById...
    mContext = parent.getContext();
    switch (viewType) {
        case VIDEO_TYPE:
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.video_type, parent, false);
            return new VideoHolder(v);
        case IMAGE_TYPE:
            View i = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_list, parent, false);
            return new PhotoHolder(i);

    }
    return null;
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
    mHolder = holder;
    photo = moviesList.get(position);
    //  final VideoHolder viewHolder2 = (VideoHolder)holder;
    int viewType = getItemViewType(position);
    switch ( viewType ) {
        case IMAGE_TYPE:
            PhotoHolder photoview = (PhotoHolder) holder;
            final ImageLoader imageLoader =  ImageLoader.getInstance();
            imageLoader.displayImage(getItem(position).getImage_path(),photoview.image);
            break;
        case VIDEO_TYPE:
            final VideoHolder viewHolder2 = (VideoHolder)holder;
            //viewHolder2.users = new StringBuilder();
            viewHolder2.bind(Uri.parse(photo.getImage_path()),moviesList);
            break;
    }


}

@Override
public int getItemCount() {
    return moviesList.size();
}
public Photo getItem(int position) {
    return moviesList.get(position);
}
@Override
public int getItemViewType ( int position ) {
    int viewType;
    if if (moviesList.get(position).getType().equals("Photo")) {
        viewType = IMAGE_TYPE;
    } else{
        viewType = VIDEO_TYPE;
    }
    return viewType;
}

【问题讨论】:

  • 那有什么问题?
  • 我想检查firebase的“类型”并根据它膨胀ViewHolder
  • 我试过了,如果其他推荐它不起作用它只会膨胀 VideoHolder..请帮助我兄弟
  • 这看起来不像是recyclerview问题,更像是比较问题。我建议你现在暂停 recyclerview,然后遍历你的数据集并弄清楚如何区分 2 项,一旦你有了显示应该是微不足道的,因为你上面提供的 recyclerview 代码似乎是正确的。

标签: android android-recyclerview adapter android-viewholder


【解决方案1】:

将 .equals() 改为 .contains()

 @Override
public int getItemViewType ( int position ) {
    int viewType;
    if (moviesList.get(position).getType_post().contains("Photo")) {
        viewType = IMAGE_TYPE;
    } else{
        viewType = VIDEO_TYPE;
    }
    return viewType;
}

【讨论】:

    猜你喜欢
    • 2016-06-09
    • 1970-01-01
    • 2019-07-03
    • 2016-04-05
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多