Android的ListView的每一个Item都有不同的布局

大家都知道,ListView中的数据是经过adapter适配到屏幕上的,所以要实现listview中每一个item的内容需要去操作adapter中的代码:

在使用不同布局的时候我们要重构以下两个方法:getItemViewType和getViewTypeCount.

public class MyAdapter extends BaseAdapter {
    ArrayList<String> ls;
    Context mContext;
    LinearLayout linearLayout = null;
    LayoutInflater inflater;
    TextView tex;
    final int VIEW_TYPE = 3;
    final int TYPE_1 = 0;
    final int TYPE_2 = 1;
    final int TYPE_3 = 2;

    public MyAdapter(ArrayList<String> list, Context context) {
        mContext = context;
        ls = list;
    }

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }

    @Override
    public int getViewTypeCount() {
        return 3;
    }

    @Override
    public int getCount() {
        return ls.size();
    }

    @Override
    public Object getItem(int position) {
        return ls.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder1 holder1 = null;
        ViewHolder2 holder2 = null;
        ViewHolder3 holder3 = null;
        int type = getItemViewType(position);
        if (convertView == null) {
            inflater = LayoutInflater.from(mContext);
            switch (type) {
                case TYPE_1:
                    convertView = inflater.inflate(R.layout.layout_item1, parent, false);
                    holder1 = new ViewHolder1();
                    holder1.tv1 = (TextView) convertView.findViewById(R.id.tv1);
                    convertView.setTag(holder1);
                    break;
                case TYPE_2:
                    convertView = inflater.inflate(R.layout.layout_item2, parent, false);
                    holder2 = new ViewHolder2();
                    holder2.tv2 = (TextView) convertView.findViewById(R.id.tv2);
                    convertView.setTag(holder2);
                    break;
                case TYPE_3:
                    convertView = inflater.inflate(R.layout.layout_item3,parent,false);
                    holder3 = new ViewHolder3();
                    holder3.tv3 = (TextView)convertView.findViewById(R.id.tv3);
                    convertView.setTag(holder3);
            }

        }else{
            switch (type){
                case TYPE_1:
                    holder1 = (ViewHolder1)convertView.getTag();
                    break;
                case TYPE_2:
                    holder2 = (ViewHolder2)convertView.getTag();
                    break;
                case TYPE_3:
                    holder3 = (ViewHolder3)convertView.getTag();
                    break;
            }
        }
        switch (type){
            case TYPE_1:
                holder1.tv1.setText("我是第一个"+(position + 1));

                break;
            case TYPE_2:
                holder2.tv2.setText("我是第二个"+(position + 1));

                break;
            case TYPE_3:
                holder3.tv3.setText("我是三个"+(position + 1));

                break;
        }
        return convertView;

    }

    public static class ViewHolder1 {
        TextView tv1;
    }

    public static class ViewHolder2 {
        TextView tv2;
    }

    public static class ViewHolder3 {
        TextView tv3;
    }
}

创建不同的ViewHolder,通过调用返回的type类型来确定是哪一个item就可以了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 14:26:12

Android的ListView的每一个Item都有不同的布局的相关文章

判断最后listView中最后一个item是否完全显示出来

/** * 判断最后listView中最后一个item是否完全显示出来 * listView 是集合的那个ListView * @return true完全显示出来,否则false */ protected boolean isLastItemVisible() { final Adapter adapter1 = listView.getAdapter(); if (null == adapter || adapter.isEmpty()) { return true; } final int

android listView 的最后一个item显示(菜鸟新手,老鸟勿喷)

问题:一个listView显示不满全屏时,最后一个item会自动占满剩下的屏幕高度,而我们需要看到的是每个item布局所要占的高度一样. 解决办法:主要是把ListView布局里面的高度设置为:android:layout_height="fill_parent" : listView显示的每个item就占同样的高度了.

怎样获得listview的第一个item?

============问题描述============ 想对一个listview的第一行高亮显示. 用listview.getchildat(0)是可以,但是当数据较多时,下一页的第一行也被高亮了,求解决! ============解决方案1============ 对List的Adapter经行定制 ============解决方案2============ 引用 4 楼 jjack7 的回复: Quote: 引用 1 楼 youmingdot 的回复: 对List的Adapter经行定制

Android 设置ListView当前显示的item

项目中可能会有这种需求:动态设置ListView显示的item 这种需求可能会出现在不同的情况下,有的是打开页面就要显示在特定的位置,也有的是浏览列表时实时更新数据并且改变了集合中数据,或者是某种条件触发而改变显示的位置,我遇到的就是第二种. 先说说我的情况: 用ListView展示数据,当上拉或下拉刷新时会增加集合中数据的数量,但是考虑如果item太多可能会太占资源,于是我就控制了一下集合的长度,每次刷新后如果size超过最大值时我就会从集合中移除一部分数据,但是当我在刷新adapter时问题

解决“listView点击一个Item,另外几个Item也跟着改变”的问题

如图所示: 我点击Item,右边的checkBox就会相应的变化,但是当我第一次做的时候,点击第一个Item,右边的checkBox变为绿色,但是当我listView往下拉的时候,发现下面也有是绿色的checkBox,很显然我是没有点击下面的.那么这个问题应该怎么解决呢,下面是我解决的方法: 首先是Item的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=

判断ListView的每一个item高度

前提 这个item的根view必须是LinearLayout package com.bxg.news.view; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.ListView; public class Utility { public static void setListViewHeightBasedOnCh

android实现ListView或GridView中item的倒数功能

有时在开发中可能会遇到当未到某个时间时需要让ListView或GridView中的相应item进行倒数的需求,此时,如果还是按照常见的ListView或GridView的Adapter的写法+计时功能来实现的话,则当滚动ListView或GridView的时候,item就可能会出现复用问题(即不需要进行倒数或当前item的倒数已经结束了,却还会出现倒数的现象),因此,为了解决这种问题,需要进行倒数时,重新遍历当前对象的集合,然后让每个对象的相应时间值减1,最后再通过Adapter的notifyD

Android ListView中 每一项都有不同的布局

实现代码 Adapter的代码 其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局 TYPE_1...是三种类型. 在使用不同布局的时候,getItemViewType和getViewType不能少,一般是不用这两个函数的重载的 class RunRankAdapter extends BaseAdapter { ArrayList<HashMap<String, Object>> ls; Context mContext; LinearLayou

android之ListView,详细介绍实现步骤,举例,自定义listview适配器

android之ListView,详细介绍实现步骤,举例,自定义listview适配器 09. 四 / android基础 / 没有评论 本文来源于www.ifyao.com禁止转载!www.ifyao.com android中如何使用listView是比较重要的,因为很多时候都需要将数据库中的数据以列表显示, 具体使用步骤:大体 1,建立一个item.xml文件,此布局文件布局布局如何具体显示列表中的每一个条目 2,在要使用listview的界面中添加listview控件. 3,activit