就像导航抽屉中的ListView一样:
我是否需要为自定义适配器创建三个项目类型(带有图标的项目,分隔项目,带有图标的项目),或者我可以更简单地实现此目的? 也许我应该使用两个ListViews?
提前致谢。
答案 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;
}
}