如何创建具有两个(或更多)部分和项目类型的 ListView?

How to create ListView with two (or more) sections and types of item?

就像导航抽屉中的 ListView 一样:

我是否需要为我的自定义适配器创建三种项目类型(带图标的项目、分隔符项目、不带图标的项目),或者我可以通过更简单的方式实现这一点? 也许我应该使用两个 ListView?

提前致谢。

udenfox 遵循本教程:

http://www.android4devs.com/2014/12/how-to-make-material-design-navigation-drawer.html

我相信你会得到你想要的。

首先 使用ViewHolder 模式。

生成 interfase of Item 将包括两种方法:

  • getType() - return 您的商品类型;

  • getView(LayoutInflater inflater, View convertView) - return 行的视图。在此方法中创建 ViewHolder 实例,然后将 View 参数膨胀为 VH 并在结果视图中执行一些操作。

。然后创建 2(或者你需要多少)类 来实现 Item。定义方法。然后在 ListAdaptergetView() 中调用 getView() 项并将其 return 列出。

并且不要t use 2ListView`。始终尝试编写纯代码。

您可以尝试使用新的 recyclerview 和 recyclerview 适配器,它允许您覆盖 getItem 方法和 return 不同位置的不同项目,还可以覆盖 getItemViewType 和 return 不同的布局对于任何职位。

将标志传递到您的 getview 中,这可能不是我目前能想到的最有效的方法,但我敢肯定它会有所帮助。

recyclerview 是一个很好的选择。

但是,

让我们尝试用现有的东西来完成这项工作,以防万一。

以下只是一个示例,可能不是您想要的。你应该研究它并掌握它是如何完成的并自己实施它。

首先你会有多少种列表项? - 我们暂时取 3 个。

现在,在您的 getview 方法中为每种类型的列表项传递一个整数值,它以数组类型或在解析时传递,例如,您可以在 getview 方法中有一个 if 语句来检查给定数组项中的 int 值,并根据该值膨胀不同的视图。

示例代码:

public View getView(final int position, View convertView, ViewGroup parent)     {
    // Declare Variables Globally , (here temporarily for answer)

    ArrayList<HashMap<String, String>> data;  // arraylist passed to custom adapter in my case 

    HashMap<String, String> resultp = new HashMap<String, String>(); // just a new hashmap which stores individual items from above arraylist

    result = data.get(position);

    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

   if(result.get("type")==1){

    View v = inflater.inflate(R.layout.type1, parent, false);

    //declare variables in your view , lets take some textview
    textview.setText(result.get("something"));

    return v;

   }else if(result.get("type")==2){
   View v = inflater.inflate(R.layout.type2, parent, false);

   //take an image for example here
   imageview.displayimagewithurl(result.get(url));
    return v;

   }else{ //type 3
    View v = inflater.inflate(R.layout.type3, parent, false);
   //in here lets take a layout with a textview and an image
    //You know what to do ..
   return v;
   }
}