【问题标题】:Recycler view of vertical scrolling list with Horizontal scrollable row具有水平可滚动行的垂直滚动列表的回收器视图
【发布时间】:2015-06-30 04:41:20
【问题描述】:

我想要一个 RecyclerView,其中我们有垂直可滚动的项目列表。 从这个可滚动的项目列表中,一些应该能够在水平方向滚动。 如下图所示

谁能指导我怎么做?

谢谢。

【问题讨论】:

  • 因为没有办法给recyclerview添加页脚……你可以创建一个带有水平滚动视图的项目,然后在适配器中将它膨胀,使它看起来像一个页脚。

标签: android android-layout android-recyclerview


【解决方案1】:

自定义布局管理器

  • StaticGridLayoutManager - 具有基于数据集的可变列数的 2D 滚动网格。可见(非回收)视图的窗口是
    静态确定。
  • DynamicGridLayoutManager - 动态确定可见视图窗口的 2D 滚动网格。导致观看次数减少 内存,但滚动性能值得怀疑。

我遇到了同样的问题,我找到了这个库。也许它会帮助你。 https://github.com/devunwired/recyclerview-playground

更多关于 RecyclerView LayoutManager 的详情:http://wiresareobsolete.com/2014/09/building-a-recyclerview-layoutmanager-part-1/

p/s:对于你的情况http://lucasr.org/2014/07/31/the-new-twowayview/

【讨论】:

  • 问题是,来自 lucasr 的双向视图,没有示例或教程......但也许我们应该继续自己尝试
【解决方案2】:

由于这似乎是一个常见问题,我想我会分享我的简单实现。使用 RecyclerView 很容易实现这一点。当使用设备相机拍摄照片时,我尝试创建可滚动图像的水平列表时这样做了。我已经粘贴了适配器的相关部分。

我使用了一个 RecyclerView,它使用了一个方向设置为水平的 LinearLayoutManager。

适配器本身非常简单(请注意这里只有相关部分):

import android.content.Context;
import android.graphics.Bitmap;
import android.media.Image;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.ebay.lockers.R;
import com.ebay.lockers.utils.AsyncDrawable;
import com.ebay.lockers.utils.BitmapUtils;
import com.ebay.lockers.utils.BitmapWorkerTask;

import java.io.File;
import java.util.List;

/**
 * Created by Sunil on 6/17/2016.
 */
public class ImagesHorizontalListAdapter extends RecyclerView.Adapter<ImagesHorizontalListAdapter.ImagesViewHolder> {

    private Context context;
    private List<File> imageFiles;

    public ImagesHorizontalListAdapter(Context context, List<File> imageFiles) {
        this.context = context;
        this.imageFiles = imageFiles;
    }

    @Override
    public ImagesHorizontalListAdapter.ImagesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View layout = LayoutInflater.from(context).inflate(R.layout.simple_image_view, parent, false);
        ImagesViewHolder viewHolder = new ImagesViewHolder(layout);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ImagesHorizontalListAdapter.ImagesViewHolder holder, final int position) {
        int availableWidth = context.getResources().getDisplayMetrics().widthPixels;
        int imageWidth = availableWidth/4; // Number of images to be shown by default
        int imageHeight = imageWidth*4/3;
        final int minDimenForScaling = Math.min(imageWidth, imageHeight);

        holder.image.post(new Runnable() {
            @Override
            public void run() {
                loadBitmap(imageFiles.get(position), holder.image, minDimenForScaling, minDimenForScaling);
            }
        });
    }

    @Override
    public int getItemCount() {
        return imageFiles.size();
    }

    public void loadBitmap(File file, ImageView imageView, int reqWidth, int reqHeight) {
        if(BitmapUtils.cancelPotentialWork(file, imageView)) {
            final BitmapWorkerTask task = new BitmapWorkerTask(imageView, reqWidth, reqHeight);
            // The second Bitmap parameter is a placeholder image
            // Should consider animation; TO DO --
            final AsyncDrawable asyncDrawable = new AsyncDrawable(context.getResources(), null, task);
            imageView.setImageDrawable(asyncDrawable);
            task.execute(file);
        }
    }

    public static class ImagesViewHolder extends RecyclerView.ViewHolder {
        // each data item is an image
        ImageView image;

        public ImagesViewHolder(View layout) {
            super(layout);
            this.image = (ImageView) layout.findViewById(R.id.image);
        }
    }
}

【讨论】:

  • 这不能回答 op 提出的问题
  • 它为他提供了解决方案的蓝图。 OP 要求提供一份指南,这正是我所做的。请批判性地分析问题。
  • 该操作询问了一个 recyclerview,它将垂直包含项目,并且在这些项目中,一些行将包含多个项目,如图所示。您的解决方案仅涵盖垂直或水平显示项目的第一部分。它不包括他所问的。请再看问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 2019-07-27
  • 2021-11-13
  • 1970-01-01
  • 2013-07-18
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多