隐藏/显示ListItem组件与不同的listitem视图

时间:2015-02-06 07:36:58

标签: android listview

我的问题是关于列表视图。让我们对我的列表视图说,我将有3种不同的项目,

1-列表项没有图像 带有封面图片的2-列表项目 3-列表项目,2x平方图像代替封面图像

假设我可以构建一个像这样的列表项

<LinearLayout>
   <ImageView visibility gone /><ImageView with visibility gone/>
</LinearLayout>

因此,当我为这个列表视图编写我的适配器时,为这些使用不同的布局或使用上面的内容并根据图像数隐藏/显示图像视图更方便。有没有更好的&#34; ?感谢

2 个答案:

答案 0 :(得分:0)

我会覆盖getViewTypeCount()getItemViewType(int position),并在我getView()的基础上隐藏/显示ImageViews。您的3种类型的项目没有显着差异,最终结果可以通过隐藏/显示轻松实现。此外,当您使用getItemViewType(int position)时,Android仍会重复使用列表中的大量视图。

答案 1 :(得分:0)

我用这种方式解决了这个问题。希望对你有所帮助。 首先,您必须为不同类型创建模型。您应该为不同的模型创建自定义布局。 例如,我有两种类型: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"
            }