【问题标题】:How to create a layout with different types of cards?如何使用不同类型的卡片创建布局?
【发布时间】:2019-10-09 06:05:48
【问题描述】:

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

【问题讨论】:

  • 我认为这可以帮助你:stackoverflow.com/a/26245463/4158832
  • 使用滚动视图,图片中的所有视图都不一样,recyclerview用于复用视图数动态变化的视图

标签: android android-layout android-recyclerview android-cardview


【解决方案1】:

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

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

最好的方法是使用滚动视图->线性布局->卡片视图。

如 Md. Asaduzzaman 所述

访问https://stackoverflow.com/a/58298078/9186263

【讨论】:

    【解决方案2】:

    为什么要为这个简单的视图使用RecyclerViewRecyclerView 用于显示数据列表。您只需将ScrollView 用作父级,将CardView 用作每个子级。

    <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>
    

    【讨论】:

      【解决方案3】:

      在您的adapterOverride getItemViewType 中,如下所示。

      @Override
          public int getItemViewType(int position) {
      
              if (position % 3 == 0) {
                  return 1;
              } else if (position % 2 == 0) {
                  return 2;
              } else {
                  return 3;
              }
          }
      

      oncreateViewHolder方法return 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

      【讨论】:

        【解决方案4】:

        有两件事,首先,如果您知道需要显示的项目总数然后不要使用 RecyclerView,因为每个孩子都有不同的布局,所以处理它会更复杂。 其次,如果总数不固定,那么请检查以下链接。 https://www.journaldev.com/12372/android-recyclerview-example

        【讨论】:

          【解决方案5】:
          如果您想回收视图

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-05-21
            • 1970-01-01
            • 2022-09-30
            • 1970-01-01
            • 2023-03-12
            • 2016-07-16
            • 2018-11-04
            相关资源
            最近更新 更多