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

时间:2015-02-06 12:51:21

标签: android android-layout android-listview

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

enter image description here

我是否需要为自定义适配器创建三个项目类型(带有图标的项目,分隔项目,带有图标的项目),或者我可以更简单地实现此目的? 也许我应该使用两个ListViews?

提前致谢。

4 个答案:

答案 0 :(得分:1)

第一次使用ViewHolder模式。

interfase Item,其中包含两种方法:

  • getType() - 返回商品的类型;

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

。然后创建2个(或多少你需要的)类来实现Item。定义方法。然后在ListAdapter的{​​{1}}内调用getView()项,并将其返回列表。

并且getView() ListView`。总是尝试编写纯代码。

答案 1 :(得分:0)

udenfox 遵循本教程:

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

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

答案 2 :(得分:0)

您可以尝试使用新的recyclerview和recyclerview适配器,它允许您覆盖getItem方法并返回不同位置的不同项,也可以覆盖getItemViewType并为任何位置返回不同的布局。

答案 3 :(得分:0)

将一个标记传递到你的getview中,这可能不是我目前想到的最有效的方式,但我很确定它会有所帮助。

回收者视图是一个非常好的选择。

但是,

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

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

首先,您将拥有多少种类型的列表项? - 现在让我们拿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;
   }
}