ListView加载两种Item样式问题总结
来源:互联网 发布:ubuntu下好用的输入法 编辑:程序博客网 时间:2024/06/07 08:18
<span style="font-family:Arial, Helvetica, sans-serif;"><span style="background-color: rgb(255, 255, 255);">原创文章 ,转载请说明出处</span></span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">ListVeiw的重要性不多说,总结今天一下使用LIstView加载两种Item样式的情况</span>
1)要加载两种item样式,两个item样式xml文件肯定需要准备好 个人觉得 id望文生义很重要,
2)绑定ListView控件,不多说, 接着initView()准备两个Item布局需要的数据
3)最关键的一步来了,重写BaseAdapter!!!!!!!!! 怎么重写呢???附上的例子实现ListView的第一个Item与之后的Item样式不同,直接上代码 ,附带详细注释
importandroid.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by CMS on 2016/8/10. */public class TextAdapter extends BaseAdapter{ private class ViewHolder1{ //ListView中大海报模块ViewHolder ImageView imageView1; TextView textView1-1; TextView textView1-2; TextView textView1-3; TextView textView1-4; TextView textView1-5; } private class ViewHolder2{ //ListView下面子模块ViewHolder ImageView imageView2; TextView textView2-1; TextView textView2-2; TextView textView2-3; TextView textView2-4; } private Context context; //存储上下文 private List<Map<String,Object>> listData; //存储数据源 private int[] resource; //存储item布局文件 private String[] keyForm; //存储数据key值 private int[] idForm; //存储对应控件Id private LayoutInflater inflater; //用来找res/layout/下的xml布局文件,并且实例化 private ViewHolder1 viewHolder1=null; private ViewHolder2viewHolder2=null; public TextAdapter(Context context,List<Map<String,Object>>listData, int[]resource, String[] keyForm, int[] idForm){ this.context=context; this.listData=listData; this.resource=new int[resource.length]; this.keyForm=new String[keyForm.length]; this.idForm=new int[idForm.length]; //调用系统方法拷贝数组 System.arraycopy(keyForm,0,this.keyForm,0,keyForm.length); System.arraycopy(idForm,0,this.idForm,0,idForm.length); System.arraycopy(resource,0,this.resource,0,resource.length); inflater=(LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount(){ return listData.size(); } @Override public ObjectgetItem(int position) { return listData.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getViewTypeCount(){ //重写getViewTypeCount()方法返回item样式的数量 这里实现ListView的第一个Item与之后的item的样式不同 return 2; } @Override public int getItemViewType(int position) { //返回item的样式类型 用在getView()方法中判断 if (position==0){ //如果是第一个item 放回类型0 return 0; }else{ //如果是第二个item 放回类型1 return 1; } } @Override public ViewgetView(int position, View convertView, ViewGroup parent){ if (getItemViewType(position)==0){ //如果item需要使用的样式类型为第一种 if (convertView!=null){ //判断是否缓存 viewHolder1= (ViewHolder1) convertView.getTag(); //converView不为空 通过tag找到缓存的布局 }else{ convertView=inflater.inflate(resource[0],null); //同步第一个item的样式布局文件的实例化布局 viewHolder1=new ViewHolder1(); //实例化第一个Item对应的VIE我Holder //获取idForm数组中的id数据 绑定控件 viewHolder1.imageView1= (ImageView) convertView.findViewById(idForm[0]); viewHolder1.textView1-1= (TextView) convertView.findViewById(idForm[1]); viewHolder1.textView1-2= (TextView) convertView.findViewById(idForm[2]); viewHolder1.textView1-3= (TextView) convertView.findViewById(idForm[3]); viewHolder1.textView1-4= (TextView) convertView.findViewById(idForm[4]); viewHolder1.textView1-5= (TextView) convertView.findViewById(idForm[5]); convertView.setTag(viewHolder1); } }else { //如果Item需要使用的样式为第二种 下面步骤同上 if (convertView!=null){ viewHolder2= (ViewHolder2) convertView.getTag(); }else{ convertView=inflater.inflate(resource[1],null); viewHolder2=new ViewHolder2(); viewHolder2.imageView2= (ImageView) convertView.findViewById(idForm[6]); viewHolder2.textView2-1= (TextView) convertView.findViewById(idForm[7]); viewHolder2.textView2-2= (TextView) convertView.findViewById(idForm[8]); viewHolder2.textView2-3= (TextView) convertView.findViewById(idForm[9]); viewHolder2.textView2-4= (TextView) convertView.findViewById(idForm[10]); convertView.setTag(viewHolder2); } } // HashMap<String,Object> map= (HashMap<String,Object>) listData.get(position); //通过位置获取listData中的map元素 if(getItemViewType(position)==0&&map!=null){ //当item需要加载的布局类型为第一种时 //通过keyFrorm获取各个数据相应的Key值 然后通过Key中在map中取出对应的数据 int imageView1= (Integer) map.get(keyForm[0]); String textView1-1= (String) map.get(keyForm[1]); String textView1-2= (String)map.get(keyForm[2]); String textView1-3= (String)map.get(keyForm[3]); //设置布局中控件要显示的视图 viewHolder1.imageView1.setImageResource(imageView1); viewHolder1.textView1-1.setText(textView1-1); viewHolder1.textView1-2.setText(textView1-2); viewHolder1.textView1-3.setText(textView1-3); //为特定的控件设置点击事件 viewHolder1.textView1-4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "报名参加", Toast.LENGTH_SHORT).show(); } }); viewHolder1.textView1-5.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(context, "查看详情", Toast.LENGTH_SHORT).show(); } }); }else if (getItemViewType(position)!=0&&map!=null){ //当item需要加载的布局类型为第二种时 其他步骤同上 int imageView2= (Integer) map.get(keyForm[4]); String textView2-1= (String) map.get(keyForm[5]); String textView2-2= (String)map.get(keyForm[6]); String textView2-3= (String)map.get(keyForm[7]); viewHolder2.imageView2.setImageResource(imageView2); viewHolder2.textView2-1.setText(textView2-1); viewHolder2.textView2-2.setText(textView2-2); viewHolder2.textView2-3.setText(textView2-3); viewHolder2.textView2-4.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(context, "查看详情", Toast.LENGTH_SHORT).show(); } }); } return convertView; }}importandroid.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by CMS on 2016/8/10. */public class TextAdapter extends BaseAdapter{ private class ViewHolder1{ //ListView中大海报模块ViewHolder ImageView imageView1; TextView textView1-1; TextView textView1-2; TextView textView1-3; TextView textView1-4; TextView textView1-5; } private class ViewHolder2{ //ListView下面子模块ViewHolder ImageView imageView2; TextView textView2-1; TextView textView2-2; TextView textView2-3; TextView textView2-4; } private Context context; //存储上下文 private List<Map<String,Object>> listData; //存储数据源 private int[] resource; //存储item布局文件 private String[] keyForm; //存储数据key值 private int[] idForm; //存储对应控件Id private LayoutInflater inflater; //用来找res/layout/下的xml布局文件,并且实例化 private ViewHolder1 viewHolder1=null; private ViewHolder2viewHolder2=null; public TextAdapter(Context context,List<Map<String,Object>>listData, int[]resource, String[] keyForm, int[] idForm){ this.context=context; this.listData=listData; this.resource=new int[resource.length]; this.keyForm=new String[keyForm.length]; this.idForm=new int[idForm.length]; //调用系统方法拷贝数组 System.arraycopy(keyForm,0,this.keyForm,0,keyForm.length); System.arraycopy(idForm,0,this.idForm,0,idForm.length); System.arraycopy(resource,0,this.resource,0,resource.length); inflater=(LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount(){ return listData.size(); } @Override public ObjectgetItem(int position) { return listData.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getViewTypeCount(){ //重写getViewTypeCount()方法返回item样式的数量 这里实现ListView的第一个Item与之后的item的样式不同 return 2; } @Override public int getItemViewType(int position) { //返回item的样式类型 用在getView()方法中判断 if (position==0){ //如果是第一个item 放回类型0 return 0; }else{ //如果是第二个item 放回类型1 return 1; } } @Override public ViewgetView(int position, View convertView, ViewGroup parent){ if (getItemViewType(position)==0){ //如果item需要使用的样式类型为第一种 if (convertView!=null){ //判断是否缓存 viewHolder1= (ViewHolder1) convertView.getTag(); //converView不为空 通过tag找到缓存的布局 }else{ convertView=inflater.inflate(resource[0],null); //同步第一个item的样式布局文件的实例化布局 viewHolder1=new ViewHolder1(); //实例化第一个Item对应的VIE我Holder //获取idForm数组中的id数据 绑定控件 viewHolder1.imageView1= (ImageView) convertView.findViewById(idForm[0]); viewHolder1.textView1-1= (TextView) convertView.findViewById(idForm[1]); viewHolder1.textView1-2= (TextView) convertView.findViewById(idForm[2]); viewHolder1.textView1-3= (TextView) convertView.findViewById(idForm[3]); viewHolder1.textView1-4= (TextView) convertView.findViewById(idForm[4]); viewHolder1.textView1-5= (TextView) convertView.findViewById(idForm[5]); convertView.setTag(viewHolder1); } }else { //如果Item需要使用的样式为第二种 下面步骤同上 if (convertView!=null){ viewHolder2= (ViewHolder2) convertView.getTag(); }else{ convertView=inflater.inflate(resource[1],null); viewHolder2=new ViewHolder2(); viewHolder2.imageView2= (ImageView) convertView.findViewById(idForm[6]); viewHolder2.textView2-1= (TextView) convertView.findViewById(idForm[7]); viewHolder2.textView2-2= (TextView) convertView.findViewById(idForm[8]); viewHolder2.textView2-3= (TextView) convertView.findViewById(idForm[9]); viewHolder2.textView2-4= (TextView) convertView.findViewById(idForm[10]); convertView.setTag(viewHolder2); } } // HashMap<String,Object> map= (HashMap<String,Object>) listData.get(position); //通过位置获取listData中的map元素 if(getItemViewType(position)==0&&map!=null){ //当item需要加载的布局类型为第一种时 //通过keyFrorm获取各个数据相应的Key值 然后通过Key中在map中取出对应的数据 int imageView1= (Integer) map.get(keyForm[0]); String textView1-1= (String) map.get(keyForm[1]); String textView1-2= (String)map.get(keyForm[2]); String textView1-3= (String)map.get(keyForm[3]); //设置布局中控件要显示的视图 viewHolder1.imageView1.setImageResource(imageView1); viewHolder1.textView1-1.setText(textView1-1); viewHolder1.textView1-2.setText(textView1-2); viewHolder1.textView1-3.setText(textView1-3); //为特定的控件设置点击事件 viewHolder1.textView1-4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "报名参加", Toast.LENGTH_SHORT).show(); } }); viewHolder1.textView1-5.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(context, "查看详情", Toast.LENGTH_SHORT).show(); } }); }else if (getItemViewType(position)!=0&&map!=null){ //当item需要加载的布局类型为第二种时 其他步骤同上 int imageView2= (Integer) map.get(keyForm[4]); String textView2-1= (String) map.get(keyForm[5]); String textView2-2= (String)map.get(keyForm[6]); String textView2-3= (String)map.get(keyForm[7]); viewHolder2.imageView2.setImageResource(imageView2); viewHolder2.textView2-1.setText(textView2-1); viewHolder2.textView2-2.setText(textView2-2); viewHolder2.textView2-3.setText(textView2-3); viewHolder2.textView2-4.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(context, "查看详情", Toast.LENGTH_SHORT).show(); } }); } return convertView; }}
4)回到Activity 实例化TextAdapter 将准备好的数据传入 然后setAdapter
0 0
- ListView加载两种Item样式问题总结
- Android ListView加载两种不同的item
- 加载listview里面不同样式的item
- ListView解决一次性加载全部item问题
- ListView加载不同Item布局的问题
- ListView中item颜色加载混乱问题!
- android listview item 加载不同的布局样式文件
- android ListView中只显示一个item问题的两种解决办法
- listview遇到多种样式item
- 关于listView 每个item 加载Html的问题
- listView Item 焦点问题
- listview item的问题
- listview中显示两种不同的item
- android ListView 滚动加载item
- listView 加载不同布局item
- Listview item加载的过程
- ListView 多种Item的加载
- android之ListView的item布局问题总结
- 初识Java多线程编程
- 线程的生命周期
- Oracle分页以及与MySql的比较
- SQL--JOIN之完全用法
- 线程的优先级
- ListView加载两种Item样式问题总结
- ionic之AngularJS扩展动态组件
- 学Android开发 这19个开发工具助你顺风顺水
- ERROR : arm-linux-ld:u-boot.lds:1: ignoring invalid character `#' in expression
- java创建线程
- POJ 3311 Hie with the Pie(状压DP)
- Android-->获取所有联系人以及所有的字段(联系人头像,邮箱,地址,公司等)
- Java7并发编程--3.2、CountDownLatch等待多个并发事件完成
- ipv6怎么转换成数字(bigInteger) ipv6 to BigInteger