【问题标题】:Android layout advice (RecyclerView, ViewPager and CardView)Android 布局建议(RecyclerView、ViewPager 和 CardView)
【发布时间】:2015-06-08 11:28:02
【问题描述】:

我需要一些建议来实现我的 android 应用程序的设计。

我使用RecyclerView 来显示CardView 的列表。没问题。但是,我需要一个带有 ViewPager 的顶部,以水平滑动显示其他 CardView

http://i.stack.imgur.com/akg2i.png

我读到Viewpager 不是很适合放在RecyclerView 中,所以也许更好的方法是创建一个ScrollView,里面有一个ViewPager,然后是一个RecyclerView,然后禁用RecyclerView 的滚动?

另外,我可以将ViewPager 视图与CardView 一起使用吗?

编辑:

好的问题已解决:我从 fmt.Println.MKO 的评论中尝试了这个解决方案

您可以这样做,定义 2 种 Items 类型,一种用于您的常用卡片,一种用于您的 2.RecyclerView,使用 int getItemViewType(int position),您返回特定类型。并在 onCreateViewHolder(ViewGroup parent, int viewType) 中根据类型创建一个视图持有者,无论是您的卡片还是 2. RecyclerView

在我的PostCardAdapterRecyclerView 使用:

   @Override
        public int getItemViewType(int position) {
            RecyclerItem p = items.get(position);
            if (p.isHeader){
                return TYPE_HEADER;
            }
            return TYPE_POST;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) {
        switch (type) {
            case TYPE_HEADER:
                RecyclerView rv = (RecyclerView) LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.home_header, viewGroup, false);
                rv.setHasFixedSize(true);
                PostsCardAdapter adapter2 = new PostsCardAdapter(this.headerPosts);
                rv.setAdapter(adapter2);
                LinearLayoutManager layoutManager = new LinearLayoutManager(viewGroup.getContext(), LinearLayoutManager.HORIZONTAL, false);
                rv.setLayoutManager(layoutManager);
                return new HeaderViewHolder(rv);

            default:
                View postView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.post, viewGroup, false);
                return new PostsViewHolder(postView);
        }

    }

onBindViewHolder 中的 TYPE_HEADER 没有什么特别的操作

只需要应用 scrollTo 方法来像 viewPager 一样工作,并找到一个解决方案来显示一个带有圆圈的组件,指示显示了哪个项目。

【问题讨论】:

  • “另外,我可以使用 ViewPager 视图 CardView 吗?”。是的。剩下的,你可以为你想要展示的东西添加一个小的设计模型吗?特别是对于“但是,我需要一个顶部 [...]”。
  • 好的,感谢您的更新。我不会提供答案,因为我真的不知道回收器视图和视图寻呼机将如何协同工作的可用性友好性 - 但我建议只需为自定义项目实现具有 ViewHolder 模式的回收器视图。在这些自定义项中(使用相对布局),在顶部添加视图分页器,在下面添加两个卡片视图。 Recycler View 和 ViewPager 都不需要太多时间来实现。测试它并提供结果。补充:我不会使用你的第二种方法。
  • @fmt.Println.MKO 你能在 [stackoverflow.com/questions/30707968/…] 上帮助我吗?实际上,我需要在 viewpager 中滑动的这种卡片视图。

标签: android android-viewpager android-recyclerview android-cardview


【解决方案1】:

据我了解,您有一个水平滚动视图和下面的垂直滚动视图。

为此,您必须在您的活动/片段 layout.xml 中添加两个 RecyclerView

在您的第一个 RecyclerView 上添加一个具有水平方向的 LinearLayoutManager。

您不需要查看器。

【讨论】:

  • 是的,但是是否可以使用 ViewPager 的功能,例如:仅显示 1 项,在滑动开始时自动滚动列表并在单独的控件中显示当前的“页码”?
  • 是的,只要让顶卡的宽度与屏幕宽度相匹配,还有一个滚动监听,从另一个RecyclerView的LayoutoutManager调用scrollTo方法
  • 不,我只需要 ViewPager 来显示 4 个项目。就像幻灯片一样。
  • 啊,我明白了。如果 viewPager 在回收站视图中可能会出现问题,但如果不是,我认为在回收站视图上方使用 ViewPager 没有问题?
  • 啊,所以你的 1. RecyclerView 应该是 2. RecyclerView 的第一个元素?然后你可以这样做,定义 2 个 Items 类型,一个用于您的常用卡片,一个用于您的 2.RecyclerView,使用 int getItemViewType(int position),您返回特定类型。并在 onCreateViewHolder(ViewGroup parent, int viewType) 中根据类型创建一个视图持有者,无论是您的卡片还是 2. RecyclerView
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
相关资源
最近更新 更多