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;

    }

}

相关文章
|
7月前
|
XML 前端开发 测试技术
如何使用 Postman 发送 POST XML 请求?
使用 Postman 发送带有 XML 数据的 POST 请求。我们将引导您完成将 XML 数据有效发送到 Web 服务或 API 的步骤,使处理这种常见数据格式变得简单易行。
|
负载均衡 监控 前端开发
云原生Istio架构和组件介绍 1
云原生Istio架构和组件介绍
398 0
|
7月前
|
存储 人工智能 安全
智能导诊知识库主要包含哪些内容?
智能导诊知识库是医疗AI的核心,涵盖医学知识、患者交互和技术规则。其内容包括:一、医学专业知识体系,如疾病与症状数据库、治疗指南;二、医院资源与规则库,涉及科室医生画像和医保审核规则;三、患者交互支持库,提供多模态交互和导诊逻辑;四、动态更新与安全机制,确保知识迭代与数据安全;五、扩展应用场景库,支持互联网医疗与健康管理。通过知识图谱、NLP等技术,实现从症状输入到精准就医的全链条服务。
245 7
|
算法
字节跳动《算法中文手册》火了,完整版 PDF 开放下载!
字节跳动《算法中文手册》火了,完整版 PDF 开放下载!
3023 0
字节跳动《算法中文手册》火了,完整版 PDF 开放下载!
|
存储 弹性计算 大数据
阿里云8核16G云服务器价格多少钱?2024年阿里云8核16G云服务器性能测评
2024年阿里云8核16G云服务器的价格为199元一年。这是阿里云为新用户提供的优惠价格,用户可以根据自己的需求选择合适的带宽和云盘配置。关于阿里云8核16G云服务器的性能测评,该服务器配备了16GB的内存和8核的CPU,具有强大的计算能力和处理速度,能够轻松应对大型应用、复杂计算和高并发场景。同时,服务器提供了多种带宽选择,最高可达5M,确保了网络连接的快速性和稳定性。40GB ESSD云盘提供了充足的存储空间,能够满足用户的数据存储需求。总体来说,阿里云8核16G云服务器在性能和价格方面都表现出色,适合大型网站、企业级应用和高并发场景。用户可以根据自己的实际需求选择合适的带宽和云盘配置。
1219 0
阿里云8核16G云服务器价格多少钱?2024年阿里云8核16G云服务器性能测评
|
缓存 算法 安全
这才叫 API 接口设计!
一家公司的每个系统都会有各种各样的接口,但是大部分公司,特别是传统行业的公司的所谓接口文档更多是当每个系传统的 word 文本格式,这种传统的格式有着人尽皆知的痛点: 1. 维护不及时; 2. 与代码不同步; 3. 归档后“便束之高阁”; 4. 接口文档跟代码没有互动; 5. 文本检索无法建立全局搜索,需要额外借助工具。 为了解决上述的问题,需要建立一套行之有效的接口管理体系,该体系的目标是: 1. 能够进行接口文档管理,作为后续的接口治理的其中一部分; 2. 能作为接口测试的平台,这样能保证接口跟代码是同步的; 3. 支持文本检索。
|
算法 测试技术
力扣经典150题第五十一题:有效的括号
力扣经典150题第五十一题:有效的括号
144 0
|
JSON JavaScript 前端开发
深入JS面向对象(原型-继承)(四)
深入JS面向对象(原型-继承)
108 0
|
存储 Linux 数据安全/隐私保护
Linux命令(74)之unzip
Linux命令(74)之unzip
434 2
|
前端开发 搜索推荐 Java
小白也能做出满分前端工程:01 配置管理(上)
小白也能做出满分前端工程:01 配置管理
340 0