如何使用不同类型的卡片创建布局?

How to create a layout with different types of cards?

我正在尝试开发一个可以显示统计信息的应用程序。数据将来自多个 API,并作为 JSONArray 返回。我很困惑,我应该为每张卡创建单独的 recyclerview (s),因为数据来自不同的 list/models 还是我应该创建一个 recyclerview/one 适配器?实现下面给出的布局的最佳方法是什么。请帮我提供一个工作代码。我对此很陌生。 :

在你的adapterclassOverride getItemViewType中像下面这样。

@Override
    public int getItemViewType(int position) {

        if (position % 3 == 0) {
            return 1;
        } else if (position % 2 == 0) {
            return 2;
        } else {
            return 3;
        }
    }

oncreateViewHolderreturn view据其view type。如下图

@Override
    public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case 1:
                View viewONE = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_template_one, parent, false);
                CustomViewHolder rowONE = new CustomViewHolder(viewONE);
                return rowONE;

            case 2:
                View viewTWO = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_template_two, parent, false);
                CustomViewHolder rowTWO = new CustomViewHolder(viewTWO);
                return rowTWO;

            case 3:
                View viewTHREE = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_template_three, parent, false);
                CustomViewHolder rowTHREE = new CustomViewHolder(viewTHREE);
                return rowTHREE;

        }
        return null;
    }

有关完整示例,请参阅 this

为什么要对这个简单的视图使用 RecyclerViewRecyclerView 用于显示数据列表。您只需将 ScrollView 用作 parent 和 CardView 每个 child.

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:scrollbars="none">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <!-- CardView -->
        <!-- CardView -->
        <!-- CardView -->
        <!-- CardView -->
    </LinearLayout>
</ScrollView>

有两件事,首先,如果您知道需要显示的项目总数,那么就不要使用 RecyclerView,处理它会更复杂,因为每个 child 都有不同的布局在你的情况下。 其次,如果总数不固定,则检查以下 link。 https://www.journaldev.com/12372/android-recyclerview-example

Recyclerview 用于动态显示大量相似项目。

您有几张不同视图的卡片。

实现此目的的最佳方法是使用滚动视图->线性布局->卡片视图。

如 Md. Asaduzzaman 所述

访问

如果您想回收视图,RecyclerView 非常有用。这意味着重新使用视图。但在你的情况下,如果项目之间的差异太大,那么这样做绝对没有意义。

一种方法是采用其他答案中建议的层次结构:

  1. 滚动视图:
  2. 一个视图组,可让您根据需要组织卡片
  3. 您的卡片。

您可以使用 FlexBoxLayout 作为卡片的容器,如果您希望其中一些卡片并排放置。因为 FlexBox 确实值得了解并且非常 flexible。 如果不是这种情况,您可以按照 Md. Asaduzzaman 的建议使用旧的 LinearLayout