Hiding/Showing ListItem 组件与不同的 listitem 视图
Hiding/Showing ListItem components vs Different listitem view
我的问题是关于列表视图的。假设我的列表视图有 3 种不同的项目,
1- 没有图像的列表项
2- 带有封面图片的列表项
3- 用 2x 平方图像代替封面图像的列表项目
假设我可以像这样构造一个列表项
<LinearLayout>
<ImageView visibility gone /><ImageView with visibility gone/>
</LinearLayout>
所以,当我为这个列表视图编写我的适配器时,为这些使用不同的布局或使用类似上面的内容并根据图像数量隐藏/显示图像视图是否更方便。有没有 "better" ?谢谢
我会覆盖 getViewTypeCount()
和 getItemViewType(int position)
,并在我的 getView()
中基于它 hide/show ImageViews。您的 3 种类型的项目没有显着差异,最终结果可以用 hiding/showing 轻松实现。此外,由于您将使用 getItemViewType(int position)
,Android 仍将重复使用列表中的许多视图。
那个案子我就是这样解决的。希望对你有帮助。
首先,您必须为不同类型创建模型。并且您应该为不同的模型创建自定义布局。
例如,我有两种类型:OneObject 和 TwoObject
public class MainObject { String type;
public MainObject(String t){ this.type = t;}
}
public class OneObject extends MainObject { String image;
public OneObject(String t, String image){
super(t);
this.image = image;
}
}
public class TwoObject extends MainObject { String place;
public TwoObject(String t, String p) {
super(t);
this.place = p;
}
}
然后。当你向arraylist添加数据时,你可以这样添加。
ArrayList<MainObject> objlist = new ArrayList<>();
objlist.add(new MainObject("main"));
objlist.add(new OneObject("one", "image"));
objlist.add(new TwoObject("two","place"));
在适配器中,您会得到 ArrayList.And 然后您可以检查应该投射哪个模型以及应该使用哪个布局。例如...
ArrayList<MainObject> objlist = new ArrayList<>();
//IN ADAPTER
..............
MainObject obj = objlist.get(position);
//u can check in other way
//if(obj.type.equals("one"))
if(obj instanceof OneObject){
//this object is "OneObject"
}
//else if(obj.type.equals("two"))
else if(obj instanceof TwoObject){
//this object is "TwoObject"
}
//else if(obj.type.equals("main"))
else if(obj instanceof MainObject){
//this object is "MainObject"
}
我的问题是关于列表视图的。假设我的列表视图有 3 种不同的项目,
1- 没有图像的列表项 2- 带有封面图片的列表项 3- 用 2x 平方图像代替封面图像的列表项目
假设我可以像这样构造一个列表项
<LinearLayout>
<ImageView visibility gone /><ImageView with visibility gone/>
</LinearLayout>
所以,当我为这个列表视图编写我的适配器时,为这些使用不同的布局或使用类似上面的内容并根据图像数量隐藏/显示图像视图是否更方便。有没有 "better" ?谢谢
我会覆盖 getViewTypeCount()
和 getItemViewType(int position)
,并在我的 getView()
中基于它 hide/show ImageViews。您的 3 种类型的项目没有显着差异,最终结果可以用 hiding/showing 轻松实现。此外,由于您将使用 getItemViewType(int position)
,Android 仍将重复使用列表中的许多视图。
那个案子我就是这样解决的。希望对你有帮助。 首先,您必须为不同类型创建模型。并且您应该为不同的模型创建自定义布局。 例如,我有两种类型:OneObject 和 TwoObject
public class MainObject { String type;
public MainObject(String t){ this.type = t;}
}
public class OneObject extends MainObject { String image;
public OneObject(String t, String image){
super(t);
this.image = image;
}
}
public class TwoObject extends MainObject { String place;
public TwoObject(String t, String p) {
super(t);
this.place = p;
}
}
然后。当你向arraylist添加数据时,你可以这样添加。
ArrayList<MainObject> objlist = new ArrayList<>();
objlist.add(new MainObject("main"));
objlist.add(new OneObject("one", "image"));
objlist.add(new TwoObject("two","place"));
在适配器中,您会得到 ArrayList.And 然后您可以检查应该投射哪个模型以及应该使用哪个布局。例如...
ArrayList<MainObject> objlist = new ArrayList<>();
//IN ADAPTER
..............
MainObject obj = objlist.get(position);
//u can check in other way
//if(obj.type.equals("one"))
if(obj instanceof OneObject){
//this object is "OneObject"
}
//else if(obj.type.equals("two"))
else if(obj instanceof TwoObject){
//this object is "TwoObject"
}
//else if(obj.type.equals("main"))
else if(obj instanceof MainObject){
//this object is "MainObject"
}