在Android中添加多种视图类型,例如amazon app

时间:2018-04-14 18:33:17

标签: java android

我想在Android中构建像亚马逊这样的应用

亚马逊应用程序包含基于位置的不同视图类型,它添加了布局,如2 * 2布局和线性布局,以及中间位于不同位置的横幅图像。

我在Stack Overflow中研究了很多问题并找到了答案,

How to create RecyclerView with multiple view type?

但这说明了添加不同的视图类型,如文本视图和卡片视图。但在亚马逊应用程序中,看起来他们使用了嵌套的Recyclerviews。

所以我需要知道 -

  1. 如何设计亚马逊应用的用户界面。

  2. 如何添加多种视图类型,例如亚马逊。

  3. 我是新的机器人,任何建议都会有所帮助。

    注意:我在Flipkart的应用程序中也看到了相同的内容。

1 个答案:

答案 0 :(得分:0)

根据您的查询,您希望RecyclerView中的项目所需的viewType肯定取决于您将提供给适配器的数据集(如果答案是您提到的链接,其适配器中的String[] myDataset构造函数)或项目的位置。

  1. 如果项目的viewType取决于位置,则提到的答案已经是一个例子。
  2. 如果项目的viewType取决于您提供给适配器的数据集,则可以使用int getItemViewType(int position)方法从同一数据集中确定viewType。
  3. 对于一个简单的例子,使用相同的答案:

    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

    1. 您将定义包含GridView
    2. 的布局文件
    3. 会在您的一个视图类中为同一布局充气。
    4. 将定义所有方法以在同一个持有者类中交互您的网格视图
    5. 将从int getItemViewType(int position)方法
    6. 返回相应的整数代码
    7. 将从public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)方法
    8. 返回相应的观看者
    9. 将数据绑定到public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position)方法
    10. 中数据集的gridview