我想在Android中构建像亚马逊这样的应用。
亚马逊应用程序包含基于位置的不同视图类型,它添加了布局,如2 * 2布局和线性布局,以及中间位于不同位置的横幅图像。
我在Stack Overflow中研究了很多问题并找到了答案,
How to create RecyclerView with multiple view type?
但这说明了添加不同的视图类型,如文本视图和卡片视图。但在亚马逊应用程序中,看起来他们使用了嵌套的Recyclerviews。
所以我需要知道 -
如何设计亚马逊应用的用户界面。
如何添加多种视图类型,例如亚马逊。
我是新的机器人,任何建议都会有所帮助。
注意:我在Flipkart的应用程序中也看到了相同的内容。
答案 0 :(得分:0)
根据您的查询,您希望RecyclerView中的项目所需的viewType肯定取决于您将提供给适配器的数据集(如果答案是您提到的链接,其适配器中的String[] myDataset
构造函数)或项目的位置。
int getItemViewType(int position)
方法从同一数据集中确定viewType。对于一个简单的例子,使用相同的答案:
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private String[] mDataset;
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
class ViewHolder0 extends RecyclerView.ViewHolder {
...
public ViewHolder0(View itemView){
// Set default flag as background
...
}
}
class ViewHolder1 extends RecyclerView.ViewHolder {
...
public ViewHolder1(View itemView){
// Inflate your gridview layout here
...
}
// define methods to interact with your grid view
}
class ViewHolder2 extends RecyclerView.ViewHolder {
...
public ViewHolder2(View itemView){
// Set Sri Lankan flag as background
...
}
@Override
public int getItemViewType(int position) {
// determine your desired viewType here from dataset for example
switch (mDataset[position]){
case "Identifier":// your logic to identify for displaying gridview
return 1;
case "Sri Lanka":
return 2;
case "Australia":
return 3;
default:
return 0;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new ViewHolder0(...);
case 1: return new ViewHolder1(...);//holder responsible for you grid view
case 2: return new ViewHolder2(...);
...
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
switch (holder.getItemViewType()) {
case 0:
ViewHolder0 viewHolder0 = (ViewHolder0)holder;
...
break;
case 1:
ViewHolder1 viewHolder1 = (ViewHolder1)holder;
// here, bind data to your grid view
...
break;
case 2:
ViewHolder2 viewHolder2 = (ViewHolder2)holder;
...
break;
}
}
}
在RecyclerView的项目中将相应的标志设置为背景只是一个示例。您可以根据数据集中相应位置的数据选择完整的不同视图。
你必须为不同的viewTypes创建不同的布局,并在各自的ViewHolders(0,1,2 ......)中对它们进行充气。
如果您想要一个项目为GridView ,
int getItemViewType(int position)
方法public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
方法public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position)
方法