Android中关于listview填充多个布局
2015-12-02 20:19
411 查看
首先在网上可以找到很多关于Scrollview嵌套listview的解决方法,确实是可以解决,但是这种方法貌似可能会对以后的开发带来许多麻烦,并且官方也并不推荐这种做法。Google官方的原文如下:
You should never use a ScrollView with a
because ListView takes care of its own vertical scrolling. Most importantly, doing this defeats all of the important optimizations in ListView for dealing with large lists, since it effectively forces the ListView to display its entire list of items to fill
up the infinite container supplied by ScrollView.
网址:http://developer.android.com/intl/zh-cn/reference/android/widget/ScrollView.html
我的解决思路是在Listview中填充多个布局。假设现在有两种类型的布局,第一个Item是一张图片,其他Item是另一种类型的Item。我们可以使用getItemViewType()对两种类型的Item做区分,在这里我们还要重写getViewTypeCount()
首先声明初始化变量:
跟着重写getItemViewType()和getViewTypeCount()
然后重写getView()方法:
效果图
只是简单介绍了实现思路,具体的话可以自己实现。。有一个思路然后尝试自己造轮子对自己才会进步。
水平有限,写的不好的地方可以指出来。互相学习。
You should never use a ScrollView with a
ListView,
because ListView takes care of its own vertical scrolling. Most importantly, doing this defeats all of the important optimizations in ListView for dealing with large lists, since it effectively forces the ListView to display its entire list of items to fill
up the infinite container supplied by ScrollView.
网址:http://developer.android.com/intl/zh-cn/reference/android/widget/ScrollView.html
我的解决思路是在Listview中填充多个布局。假设现在有两种类型的布局,第一个Item是一张图片,其他Item是另一种类型的Item。我们可以使用getItemViewType()对两种类型的Item做区分,在这里我们还要重写getViewTypeCount()
首先声明初始化变量:
//listview中填充的第一种类型 private static final int ITEM_ONE = 0; //listview中填充的第二张类型 private static final int ITEM_LEFT = 1;
/*listview总共要填充的类型, 这个很重要,需要重写getViewTypeCount()这个方法,不然在后面使用 getView()的时候viewHolder会出现类型转换错误。 */ private static final int ITEM_COUNT = 2;
跟着重写getItemViewType()和getViewTypeCount()
public int getItemViewType(int position) { if (position == ITEM_ONE) { return ITEM_ONE; } else { return ITEM_LEFT; } }
public int getViewTypeCount() { return ITEM_COUNT; }
然后重写getView()方法:
public View getView(int position, View convertView, ViewGroup parent) { SickerListviewInfo sickerListviewInfo = (SickerListviewInfo) getItem(position); int viewType = this.getItemViewType(position); ViewHolder viewHolder = new ViewHolder(); View view = convertView; switch (viewType) { case ITEM_ONE: if (view == null) { view = mLayourInflater.inflate(R.layout.first_item, parent, false); viewHolder.graph = (ImageView) view.findViewById(R.id.graph_IV); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } viewHolder.graph.setBackgroundResource(R.mipmap.graph); return view; case ITEM_LEFT: if (view == null) { viewHolder = new ViewHolder(); view = mLayourInflater.inflate(resourceId, null); viewHolder.head_icon = (ImageView) view.findViewById(R.id.head_icon); viewHolder.time_iv = (ImageView) view.findViewById(R.id.time_iv); viewHolder.date_iv = (ImageView) view.findViewById(R.id.date_iv); viewHolder.editsicker = (ImageButton) view.findViewById(R.id.edit_sicker); viewHolder.name = (TextView) view.findViewById(R.id.name); viewHolder.time_tv = (TextView) view.findViewById(R.id.time_tv); viewHolder.date_tv = (TextView) view.findViewById(R.id.date_tv); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } viewHolder.head_icon.setBackgroundResource(sickerListviewInfo.getHead_icon()); viewHolder.time_iv.setBackgroundResource(sickerListviewInfo.getTime_iv()); viewHolder.date_iv.setBackgroundResource(sickerListviewInfo.getDate_iv()); viewHolder.editsicker.setBackgroundResource(sickerListviewInfo.getEdit_sicker()); viewHolder.name.setText(sickerListviewInfo.getName()); viewHolder.time_tv.setText(sickerListviewInfo.getTime_tv()); viewHolder.date_tv.setText(sickerListviewInfo.getDate_tv()); return view; default: break; } return null; } class ViewHolder { public ImageView head_icon; public ImageView time_iv; public ImageView date_iv; public ImageButton editsicker; public TextView name; public TextView time_tv; public TextView date_tv; public ImageView graph; }
效果图
只是简单介绍了实现思路,具体的话可以自己实现。。有一个思路然后尝试自己造轮子对自己才会进步。
水平有限,写的不好的地方可以指出来。互相学习。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories