打开各种客户端发现 Listview的布局多种多样,在我以前的认知中listview不是只能放一种item布局嘛,我就震惊了,现在我自己的项目上要用到这种方式那么就去做下

原理是listview 的adapter中 有这两个方法

// 返回当前布局的样式type
    @Overridepublic int getItemViewType(int position) {return listDatas.get(position).type;}// 返回你有多少个不同的类型的数量
    @Overridepublic int getViewTypeCount() {return 3;}

过程 1 定义一个javabeen对象

package com.example.listviewdemo;import java.util.HashMap;
import java.util.Map;/*** Created by Ace on 2016/2/13.*/
public class lIstViewItem {// 用于区分listview显示的不同item,告诉适配器我这是什么类型,listview适配器根据type决定怎么显示public int type;// 将要显示的数据用HashMap包装好public HashMap<String, Object> map;public lIstViewItem(int type, HashMap<String, Object> map) {this.type = type;this.map = map;}
}

2 把数据封装在泛型是我们JAVABeen对象的的数组里

package com.example.listviewdemo;import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;import java.util.ArrayList;
import java.util.HashMap;/*** Created by Ace on 2016/2/13.*/public class MainActivity extends Activity {private ListView listView; // 页面listviewprivate ListViewAdapter listViewAdapter; // listview适配器private ArrayList<lIstViewItem> viewItemsArraylist; // Arraylist主要装载的是传给适配器的数据集合
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();initView();// 为listview设置适配器
//        ListViewAdapter listViewAdapter = new ListViewAdapter(MainActivity.this, getDatas());
}private void initData() {}// 初始化页面组件及一些布局private void initView() {listView = (ListView) this.findViewById(R.id.listview);listViewAdapter = new ListViewAdapter(MainActivity.this, getDatas());listView.setAdapter(listViewAdapter);}/*** 这里我们用三种不同的样式进行测试**/private ArrayList<lIstViewItem> getDatas() {viewItemsArraylist = new ArrayList<lIstViewItem>();viewItemsArraylist.add(new lIstViewItem(2, getHashMapThirdType("美人鱼", "没有买卖就没有杀害", "2016-2-13")));viewItemsArraylist.add(new lIstViewItem(1, getHashMapSecondType("单身狗", "情人节自己过")));viewItemsArraylist.add(new lIstViewItem(0, getHashMapFirstType("周杰伦")));viewItemsArraylist.add(new lIstViewItem(0, getHashMapFirstType("周星驰")));viewItemsArraylist.add(new lIstViewItem(1, getHashMapSecondType("猴子", "齐天大圣孙悟空")));return viewItemsArraylist;}// 第一种样式,只传输一个数据private HashMap<String, Object> getHashMapFirstType(String firstTheme) {HashMap<String, Object> hashMap = new HashMap<String, Object>();hashMap.put("Theme", firstTheme);return hashMap;}// 第二种样式,传输两个数据private HashMap<String, Object> getHashMapSecondType(String secondTheme, String secondContent) {HashMap<String, Object> hashMap = new HashMap<String, Object>();hashMap.put("Theme", secondTheme);hashMap.put("Content", secondContent);return hashMap;}// 第三种样式,传输三个数据private HashMap<String, Object> getHashMapThirdType(String threeTheme, String threeContent, String date) {HashMap<String, Object> hashMap = new HashMap<String, Object>();hashMap.put("Theme", threeTheme);hashMap.put("Content", threeContent);hashMap.put("Date", date);return hashMap;}}

adapter中设置我们现实的条目

package com.example.listviewdemo;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;import java.util.ArrayList;/*** Created by Ace on 2016/2/13.*/
public class ListViewAdapter extends BaseAdapter {private LayoutInflater mLayoutInflater;private Context context;private ArrayList<lIstViewItem> listDatas;public ListViewAdapter(Context context, ArrayList<lIstViewItem> listDatas) {this.listDatas = listDatas;mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);} // 返回当前布局的样式type
    @Overridepublic int getItemViewType(int position) {return listDatas.get(position).type;}// 返回你有多少个不同的类型的数量
    @Overridepublic int getViewTypeCount() {return 3;}@Overridepublic int getCount() {return listDatas.size();}@Overridepublic Object getItem(int position) {return listDatas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {lIstViewItem listItem = listDatas.get(position);int Type = getItemViewType(position);//拿到当前条目的类型ViewHolderfirstType viewHolderfirstType = null;ViewHoldersecondType viewHoldersecondType = null;ViewHolderThirdType viewHolderThirdType = null;if (convertView == null) {//对类型进行判断switch (Type) {case 0:viewHolderfirstType = new ViewHolderfirstType();convertView = mLayoutInflater.inflate(R.layout.activity_first_type_item, null);viewHolderfirstType.tv_first_theme = (TextView) convertView.findViewById(R.id.tv_first_theme);viewHolderfirstType.tv_first_theme.setText(listItem.map.get("Theme").toString());convertView.setTag(viewHolderfirstType);break;case 1:viewHoldersecondType = new ViewHoldersecondType();convertView = mLayoutInflater.inflate(R.layout.activity_sencond_type_item, null);viewHoldersecondType.tv_second_content = (TextView) convertView.findViewById(R.id.tv_second_content);viewHoldersecondType.btn_second_theme = (Button) convertView.findViewById(R.id.btn_second_theme);viewHoldersecondType.tv_second_content.setText(listItem.map.get("Theme").toString());viewHoldersecondType.btn_second_theme.setText(listItem.map.get("Content").toString());convertView.setTag(viewHoldersecondType);break;case 2:viewHolderThirdType = new ViewHolderThirdType();convertView = mLayoutInflater.inflate(R.layout.activity_third_type_item, null);viewHolderThirdType.tv_three_content = (TextView) convertView.findViewById(R.id.tv_three_content);viewHolderThirdType.et_three_theme = (EditText) convertView.findViewById(R.id.et_three_theme);viewHolderThirdType.tv_three_time = (TextView) convertView.findViewById(R.id.tv_three_time);viewHolderThirdType.et_three_theme.setText(listItem.map.get("Theme").toString());viewHolderThirdType.tv_three_content.setText(listItem.map.get("Content").toString());viewHolderThirdType.tv_three_time.setText(listItem.map.get("Date").toString());convertView.setTag(viewHolderThirdType);break;}} else {switch (Type) {case 0:viewHolderfirstType = (ViewHolderfirstType) convertView.getTag();viewHolderfirstType.tv_first_theme.setText(listItem.map.get("Theme").toString());break;case 1:viewHoldersecondType = (ViewHoldersecondType) convertView.getTag();viewHoldersecondType.tv_second_content = (TextView) convertView.findViewById(R.id.tv_second_content);viewHoldersecondType.btn_second_theme = (Button) convertView.findViewById(R.id.btn_second_theme);viewHoldersecondType.tv_second_content.setText(listItem.map.get("Theme").toString());viewHoldersecondType.btn_second_theme.setText(listItem.map.get("Content").toString());break;case 2:viewHolderThirdType = (ViewHolderThirdType) convertView.getTag();viewHolderThirdType.tv_three_content = (TextView) convertView.findViewById(R.id.tv_three_content);viewHolderThirdType.et_three_theme = (EditText) convertView.findViewById(R.id.et_three_theme);viewHolderThirdType.tv_three_time = (TextView) convertView.findViewById(R.id.tv_three_time);viewHolderThirdType.et_three_theme.setText(listItem.map.get("Theme").toString());viewHolderThirdType.tv_three_content.setText(listItem.map.get("Content").toString());viewHolderThirdType.tv_three_time.setText(listItem.map.get("Date").toString());break;}}return convertView;}class ViewHolderfirstType {TextView tv_first_theme;}class ViewHoldersecondType {TextView tv_second_content;Button btn_second_theme;}class ViewHolderThirdType {EditText et_three_theme;TextView tv_three_content;TextView tv_three_time;}
}

我的genymotion又挂了......................................    布局看viewholder就知道了..不写了

转载于:https://www.cnblogs.com/AceIsSunshineRain/p/5188388.html

Listview实现不同类型的布局相关推荐

  1. Android 学习笔记 databinding简单使用:使用databinding在listview加入不同类型的view

    代码示例和解析 User.java(略) 包含String类型的name和int类型的age,构造方法包含这两个参数.包含getter和setter item_title.xml <?xml v ...

  2. 4、Flutter - 控件基础 (二)ListView 列表展示数据、布局

    ListView 列表展示数据.布局 接上篇,几点注意事项与说明 1.创建工程项目的时候,存放路径不要有中文,有中文会有警告,而且后面可能会有一些未知的问题. 如果有中文路径,创建完工程移动工程位置的 ...

  3. ListView 添加头部 和尾部 布局 (addHeaderView 和 addFooterView)

    ListView 添加头部 和尾部 布局  其实很简单 ,listview 暴露的有方法addHeaderView 和 addFooterView 从源码里面可以看到, addHeaderView 和 ...

  4. android卡片 弹簧滑动,如何在滚动android时拉类似于弹性类型的布局?

    我有每个布局,看起来像在Scrollview中嵌入的卡片类型.当我滚动时,如何像弹簧式那样移动卡片,然后回到原始位置.如何在滚动android时拉类似于弹性类型的布局? 这就像卡片弹跳.在我的布局中, ...

  5. ListView之多种类型Item

    一.概述 一般而言,listview每个item的样式是一样的,但也有很多应用场景下不同位置的item需要不同的样式. 拿微信举例,前者的代表作是消息列表,而后者的典型则是聊天会话界面. 本文重点介绍 ...

  6. ListView Viewholder的坑 线性布局的坑

    1.ListView Viewholder的坑 /*** 默认带图片的menu adapter*/public static class MenuImageAdapter extends BaseAd ...

  7. Winform中实现拖拽文件到ListView获取文件类型(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个fo ...

  8. 滑动listview隐藏和显示顶部布局

    需求: 1.listview向下滑动时,隐藏顶部布局 2.listview向上滑动到最上面,显示顶部布局 3.顶部布局的隐藏和显示有过渡效果 4.第一次加载listview时,顶部不要隐藏 布局: 注 ...

  9. Android怎么自定义listview布局,android – 如何将listView标头添加为自定义布局

    我想在listView中添加标题我尝试这样我在这里缺少的ids很好. 我在片段中使用它. ListView lv; LinearLayout header = (LinearLayout) rootV ...

  10. AdapterView及其子类之一:基本原理(ListView、ListActivity类型)

    参考<疯狂android讲义>2.5节 1.AdapterView一般用于显示列表项,其内容由Adapter提供.调用Adapter的setAdapter(Adapter)方法设置Adap ...

最新文章

  1. 80后博导当上双一流高校副校长:还是杰青获得者
  2. docker 错误 A dependency job for docker.service failed. See ‘journalctl -xe‘ for details
  3. jdk1.8要安装什么mysql_Window下安装JDK1.8+Tomcat9.0.27+Mysql5.7.28的教程图解
  4. 你在微信漂流瓶里遇到过哪些有意思的人和事?
  5. 一只初学者,如何登顶野生动物识别挑战赛?| 附代码
  6. .NET Core 2.1 Preview 2带来网络方面的改进
  7. hibernate 里面 mysql dialect 配置
  8. jsp中java代码注释_JSP页面中的三种代码注释方法
  9. 独立站开发优化问题?
  10. python 反传播_反向传播算法详解和Python代码实现
  11. 优化 | 线性化:0-1变量乘以连续变量的线性化
  12. 中奖率的三种常用算法
  13. SpringBoot、SpringCloud版本中GA/PRE/SNAPSHOT的详解
  14. 解决Visual Studio 2015创建工程时的“DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' failed to install.”错误
  15. 百度搜索结果页面的参数 搜索框提示次数(rsv_sug1)
  16. 树形选择排序(锦标赛排序)
  17. Hbase之一月速成:Hbase的shell命令
  18. 哈希表与哈希(Hash)算法
  19. 2012/5/9武汉佰钧成
  20. superIO在Linux下的设备,X86 Linux ITE SuperIO GPIO Control

热门文章

  1. FireFox 64位不支持NPAPI插件,不论是32位还是64位
  2. VS:无法将“char *”转换为“const wchar_t *”/不能将参数从“const char []”转换为“const wchar_t *”
  3. 没解决:MMC不能打开文件MSC可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版本创建。也可能你没有访问此文件的足够权限
  4. AI连围棋都可以大胜,何况游戏
  5. 诺基亚再做手机,没有机会
  6. 百度浏览器内核太低,浏览京东有问题
  7. 华为手机打开日志输出的几种方法
  8. 邮件服务器运维,什么是邮件服务器,邮件服务器详解
  9. TCP/IP 协议大致的概念
  10. Kurento Tree 简介