如何使用不同类型的卡片创建布局?
How to create a layout with different types of cards?
我正在尝试开发一个可以显示统计信息的应用程序。数据将来自多个 API,并作为 JSONArray 返回。我很困惑,我应该为每张卡创建单独的 recyclerview (s),因为数据来自不同的 list/models 还是我应该创建一个 recyclerview/one 适配器?实现下面给出的布局的最佳方法是什么。请帮我提供一个工作代码。我对此很陌生。 :
在你的adapter
classOverride 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。
为什么要对这个简单的视图使用 RecyclerView
。 RecyclerView
用于显示数据列表。您只需将 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 非常有用。这意味着重新使用视图。但在你的情况下,如果项目之间的差异太大,那么这样做绝对没有意义。
一种方法是采用其他答案中建议的层次结构:
- 滚动视图:
- 一个视图组,可让您根据需要组织卡片
- 您的卡片。
您可以使用 FlexBoxLayout 作为卡片的容器,如果您希望其中一些卡片并排放置。因为 FlexBox 确实值得了解并且非常 flexible。
如果不是这种情况,您可以按照 Md. Asaduzzaman 的建议使用旧的 LinearLayout
。
我正在尝试开发一个可以显示统计信息的应用程序。数据将来自多个 API,并作为 JSONArray 返回。我很困惑,我应该为每张卡创建单独的 recyclerview (s),因为数据来自不同的 list/models 还是我应该创建一个 recyclerview/one 适配器?实现下面给出的布局的最佳方法是什么。请帮我提供一个工作代码。我对此很陌生。 :
在你的adapter
classOverride 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。
为什么要对这个简单的视图使用 RecyclerView
。 RecyclerView
用于显示数据列表。您只需将 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 非常有用。这意味着重新使用视图。但在你的情况下,如果项目之间的差异太大,那么这样做绝对没有意义。
一种方法是采用其他答案中建议的层次结构:
- 滚动视图:
- 一个视图组,可让您根据需要组织卡片
- 您的卡片。
您可以使用 FlexBoxLayout 作为卡片的容器,如果您希望其中一些卡片并排放置。因为 FlexBox 确实值得了解并且非常 flexible。
如果不是这种情况,您可以按照 Md. Asaduzzaman 的建议使用旧的 LinearLayout
。