如何创建具有两个(或更多)部分和项目类型的 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
。定义方法。然后在 ListAdapter
在 getView()
中调用 getView()
项并将其 return 列出。
并且不要t use 2
ListView`。始终尝试编写纯代码。
您可以尝试使用新的 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;
}
}
就像导航抽屉中的 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
。定义方法。然后在 ListAdapter
在 getView()
中调用 getView()
项并将其 return 列出。
并且不要t use 2
ListView`。始终尝试编写纯代码。
您可以尝试使用新的 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;
}
}