ListViev加载不同布局项

简介:

 【用得到, mark】

重(@Override)写 getViewTypeCount() – 返回你有多少个不同的布局 重写 getItemViewType(int) – 由position返回view type id 根据view item的类型,在getView中创建正确的convertView

 

 

public class MultipleItemsList extends ListActivity {

 

    private MyCustomAdapter mAdapter;

 

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        mAdapter = new MyCustomAdapter();

        for (int i = 1; i < 50; i++) {

            mAdapter.addItem("item " + i);

            if (i % 4 == 0) {

                mAdapter.addSeparatorItem("separator " + i);

            }

        }

        setListAdapter(mAdapter);

    }

 

    private class MyCustomAdapter extends BaseAdapter {

 

        private static final int TYPE_ITEM = 0;

        private static final int TYPE_SEPARATOR = 1;

        private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;

 

        private ArrayList mData = new ArrayList();

        private LayoutInflater mInflater;

 

        private TreeSet mSeparatorsSet = new TreeSet();

 

        public MyCustomAdapter() {

            mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

 

        public void addItem(final String item) {

            mData.add(item);

            notifyDataSetChanged();

        }

 

        public void addSeparatorItem(final String item) {

            mData.add(item);

            // save separator position

            mSeparatorsSet.add(mData.size() - 1);

            notifyDataSetChanged();

        }

 

        @Override

        public int getItemViewType(int position) {

            return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;

        }

 

        @Override

        public int getViewTypeCount() {

            return TYPE_MAX_COUNT;

        }

 

        @Override

        public int getCount() {

            return mData.size();

        }

 

        @Override

        public String getItem(int position) {

            return mData.get(position);

        }

 

        @Override

        public long getItemId(int position) {

            return position;

        }

 

        @Override

        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder = null;

            int type = getItemViewType(position);

            System.out.println("getView " + position + " " + convertView + " type = " + type);

            if (convertView == null) {

                holder = new ViewHolder();

                switch (type) {

                    case TYPE_ITEM:

                        convertView = mInflater.inflate(R.layout.item1, null);

                        holder.textView = (TextView)convertView.findViewById(R.id.text);

                        break;

                    case TYPE_SEPARATOR:

                        convertView = mInflater.inflate(R.layout.item2, null);

                        holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);

                        break;

                }

                convertView.setTag(holder);

            } else {

                holder = (ViewHolder)convertView.getTag();

            }

            holder.textView.setText(mData.get(position));

            return convertView;

        }

 

    }

 

    public static class ViewHolder {

        public TextView textView;

    }

}

相关文章
|
4月前
|
计算机视觉
vs2017修改从父级或项目默认设置继承项
vs2017修改从父级或项目默认设置继承项
|
5月前
【sgDragSize】自定义组件:自定义拖拽修改DIV尺寸组件,适用于窗体大小调整
【sgDragSize】自定义组件:自定义拖拽修改DIV尺寸组件,适用于窗体大小调整
|
7月前
|
JavaScript 前端开发 Java
69jqGrid -层级加载时展开所有行
69jqGrid -层级加载时展开所有行
20 0
|
小程序 开发者
小程序__02--navigationBarTitleText配置子页面标题,依旧显示默认标题,子页面配置不显示
navigationBarTitleText配置子页面标题,依旧显示默认标题,子页面配置不显示
|
开发者
导航控件调整与增加| 学习笔记
快速学习导航控件调整与增加。
77 0
导航控件调整与增加| 学习笔记
|
前端开发 开发者 容器
【CSS】Grid 栅格布局 | 更新中..命名网格项
【CSS】Grid 栅格布局 | 更新中..命名网格项
236 0
【CSS】Grid 栅格布局 | 更新中..命名网格项
|
Android开发
Android开发 ListView(垂直滚动列表项视图)的简单使用
Android开发 ListView(垂直滚动列表项视图)的简单使用
308 0
Android开发 ListView(垂直滚动列表项视图)的简单使用
|
JavaScript
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
390 0
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
|
移动开发 JavaScript weex
uniapp原生子窗体subNvue的使用超容易理解的总结,解决覆盖不了视频或者地图等层级问题
uniapp原生子窗体subNvue的使用超容易理解的总结,解决覆盖不了视频或者地图等层级问题
2188 0
uniapp原生子窗体subNvue的使用超容易理解的总结,解决覆盖不了视频或者地图等层级问题
|
前端开发
如何为Joomla标签创建布局覆盖
Joomla允许您通过覆盖自定义几乎任何特性。 布局覆盖是一种覆盖类型,允许您自定义小元素,比如文章作者或发布日期。 在本教程中,我将向您展示如何为Joomla标签创建布局覆盖。 下图显示了Joomla文章中默认的标签样式,使用的是Protostar模板: 这些标签是可链接的。