14.不同条目的listview
分类界面


public class CategoryInfo {private String title;private String url1;private String url2;private String url3;private String name1;private String name2;private String name3;private boolean isTitle;// 是否是标题,指的是游戏,应用这些标题,下面的字段也是也是叫title,所以也这样写public boolean isTitle() {return isTitle;}public void setIsTitle(boolean isTitle) {this.isTitle = isTitle;}
public class CategoryProtocol extends BaseProtocol<List<CategoryInfo>> {@Overridepublic List<CategoryInfo> paserJson(String json) {List<CategoryInfo> categoryInfos=new ArrayList<CategoryInfo>();try {JSONArray array=new JSONArray(json);for(int i=0;i<array.length();i++){JSONObject jsonObject = array.getJSONObject(i);String title=jsonObject.getString("title");CategoryInfo categoryInfo=new CategoryInfo();categoryInfo.setTitle(title);categoryInfo.setIsTitle(true);categoryInfos.add(categoryInfo);JSONArray jsonArray = jsonObject.getJSONArray("infos");for(int j=0;j<jsonArray.length();j++){JSONObject jsonObject2 = jsonArray.getJSONObject(j);String url1=jsonObject2.getString("url1");String url2=jsonObject2.getString("url2");String url3=jsonObject2.getString("url3");String name1=jsonObject2.getString("name1");String name2=jsonObject2.getString("name2");String name3=jsonObject2.getString("name3");CategoryInfo categoryInfo2=new CategoryInfo(title, url1, url2, url3, name1, name2, name3,false);categoryInfos.add(categoryInfo2);}}return categoryInfos;} catch (JSONException e) {e.printStackTrace();return null;}}@Overridepublic String getKey() {return "category";}}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="false"android:orientation="horizontal"android:paddingLeft="5dp"android:paddingRight="5dp" ><RelativeLayoutandroid:id="@+id/rl_1"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/grid_item_bg"android:clickable="true"android:paddingBottom="10dp"android:paddingTop="10dp" ><ImageViewandroid:id="@+id/iv_1"android:layout_width="55dp"android:layout_height="55dp"android:layout_centerHorizontal="true"android:scaleType="fitXY"android:src="@drawable/ic_default" /><TextViewandroid:id="@+id/tv_1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/iv_1"android:layout_centerHorizontal="true"android:textColor="#ff7a7a7a" /></RelativeLayout>
public class CategoryContentHolder extends BaseHolder<CategoryInfo> {ImageView [] ivs;TextView [] tvs;@Overridepublic View initView() {View view=UiUtils.inflate(R.layout.item_category_content);ivs=new ImageView[3];ivs[0]=(ImageView) view.findViewById(R.id.iv_1);ivs[1]=(ImageView) view.findViewById(R.id.iv_2);ivs[2]=(ImageView) view.findViewById(R.id.iv_3);tvs=new TextView[3];tvs[0]=(TextView) view.findViewById(R.id.tv_1);tvs[1]=(TextView) view.findViewById(R.id.tv_2);tvs[2]=(TextView) view.findViewById(R.id.tv_3);return view;}@Overridepublic void refreshView(CategoryInfo data) {// 第一块if(!TextUtils.isEmpty(data.getName1())&&!TextUtils.isEmpty(data.getUrl1())){tvs[0].setText(data.getName1());bitmapUtils.display(ivs[0], HttpHelper.URL+"image?name="+data.getUrl1());tvs[0].setVisibility(View.VISIBLE);ivs[0].setVisibility(View.VISIBLE);}else{tvs[0].setVisibility(View.INVISIBLE);ivs[0].setVisibility(View.INVISIBLE);}// 第二块if(!TextUtils.isEmpty(data.getName2())&&!TextUtils.isEmpty(data.getUrl2())){tvs[1].setText(data.getName2());bitmapUtils.display(ivs[1], HttpHelper.URL+"image?name="+data.getUrl2());tvs[1].setVisibility(View.VISIBLE);ivs[1].setVisibility(View.VISIBLE);}else{tvs[1].setVisibility(View.INVISIBLE);ivs[1].setVisibility(View.INVISIBLE);}//第三块if(!TextUtils.isEmpty(data.getName3())&&!TextUtils.isEmpty(data.getUrl3())){tvs[2].setText(data.getName3());bitmapUtils.display(ivs[2], HttpHelper.URL+"image?name="+data.getUrl3());tvs[2].setVisibility(View.VISIBLE);ivs[2].setVisibility(View.VISIBLE);}else{tvs[2].setVisibility(View.INVISIBLE);ivs[2].setVisibility(View.INVISIBLE);}}}
public class CategoryTitleHolder extends BaseHolder<CategoryInfo> {private TextView tv;@Overridepublic View initView() {tv = new TextView(UiUtils.getContext());tv.setTextColor(Color.BLACK);tv.setBackgroundDrawable(UiUtils.getDrawalbe(R.drawable.grid_item_bg));return tv;}@Overridepublic void refreshView(CategoryInfo data) {tv.setText(data.getTitle());}}
public class CategoryFragment extends BaseFragment {private List<CategoryInfo> datas;public static int ITEM_TITLE =2;// 创建成功的界面@Overridepublic View createSuccessView() {BaseListView listView = new BaseListView(UiUtils.getContext());listView.setAdapter(new CategoryAdapter(datas, listView));return listView;}private class CategoryAdapter extends DefaultAdapter<CategoryInfo> {private int position;// 当前条目位置记录public CategoryAdapter(List<CategoryInfo> datas, ListView lv) {super(datas, lv);}// 实现每个条目的界面@Overrideprotected BaseHolder<CategoryInfo> getHolder() {if (!datas.get(position).isTitle()) {return new CategoryContentHolder();}else{return new CategoryTitleHolder();}}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {this.position = position;return super.getView(position, convertView, parent);}@Overrideprotected boolean hasMore() { // 当前方法 如果为false onload就不会被调用了return false;}@Overrideprotected int getInnerItemViewType(int position) {if (datas.get(position).isTitle()) {return ITEM_TITLE;} else {return super.getInnerItemViewType(position);}}@Overrideprotected List<CategoryInfo> onload() {return null;}// 集合 管理三个convertView@Overridepublic int getViewTypeCount() {return super.getViewTypeCount() + 1; // 又额外多了一种条目类型 现在又三种 1 标题 2 内容 3 加载更多(没有显示)}}// 请求服务器@Overrideprotected LoadResult load() {CategoryProtocol protocol = new CategoryProtocol();datas = protocol.load(0);return checkData(datas);}}
public View getView(int position, View convertView, ViewGroup parent) {BaseHolder holder = null;switch (getItemViewType(position)) { // 判断当前条目时什么类型case MORE_ITEM:if(convertView==null){holder=getMoreHolder();}else{holder=(BaseHolder) convertView.getTag();}break;default:if (convertView == null) {holder = getHolder();} else {System.out.println("aaa");holder = (BaseHolder) convertView.getTag();}if (position < datas.size()) {holder.setData(datas.get(position));}break;}return holder.getContentView(); // 如果当前Holder 恰好是MoreHolder 证明MoreHOlder已经显示}private MoreHolder holder;private BaseHolder getMoreHolder() {if(holder!=null){return holder;}else{holder=new MoreHolder(this,hasMore());return holder;}}/*** 是否有额外的数据* @return*/protected boolean hasMore() {return true;}
14.不同条目的listview的更多相关文章
- 【Android基础】listview控件的使用(3)------Map与SimpleAdapter组成的多显示条目的Listview
前面介绍的两种listview的使用都是最基础的,所以有很大的局限性,比如只能在一个item(即每一行的条目)中显示一个文本信息,这一篇我将介绍Map与SimpleAdapter组成的多显示条目的Li ...
- 026 Android 带不同类型条目的listview(纯文本类型的条目,图片+文字类型的条目)+读取内存空间、手机进程信息+常驻悬浮框
1.目标效果 带不同类型条目的listview(纯文本类型的条目,图片+文字类型的条目)+常驻悬浮框 2.页面布局文件 (1)activity_process_manager.xml <?xml ...
- [Delphi]带进度条的ListView
带进度条的ListView unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, C ...
- 更改AD查询LDAP条目的1000限制
解除LDAP导入时的AD条目查询限制 解除LDAP导入或读取AD用户数限制问题 更改AD查询LDAP条目的1000限制 来源:http://www.jiancool.com/article/55373 ...
- 线程安全地获取插入mysql的条目的id
在往mysql中插入条目时有时会希望能得到该插入条目的id,一种方式是再执行一个select语句条件为max(id)来获取,但这种形式在并发环境里并不是线程安全的,因为在你完成插入到再执行一个sele ...
- android 14 进度条和拖动条
进度条: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:l ...
- android-----带你一步一步优化ListView(一)
ListView作为android中最常使用的控件,可以以条目的形式显示大量的数据,经常被用于显示最近联系人列表,对于每一个 Item,均要求adapter的getView方法返回一个View,因此L ...
- 10. 面向holder编程、自动轮询
没有看过上一篇文章的话,建议先去阅读GooglePlay:9.代码抽取(adapter) 项目框架的搭建: 以后每个view都是holder BaseHolder public abstract cl ...
- Android学习笔记_11_ListView控件使用
一.界面设计: 1.activity_main.xml文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk ...
随机推荐
- Qt5.12.2开发Android环境搭建
Qt-Android开发环境概要qt-opensource-windows-x86-5.12.2----armv7jdk-8u201-windows-x64android-ndk-r18b-windo ...
- angular使用Md5加密
一.现象 用户登录时需要记住密码的功能,在前端需要对密码进行加密处理,增加安全性 二解决 1.利用npm(如果没有,先自行安装npm)安装ts-md5 npm install ts-md5 --sav ...
- 编辑gif
在撰写文档的过程中,为了清晰的表述我们的内容经常会加入一些图片.对于 `.jpg` 或 `.png` 的静态图我们可以直接 使用windows自带的照片编辑器编辑即可.对于如 licecap 录制出来 ...
- Swoole 理解manager进程和worker进程的启动顺序,以及演示如何停止或者重启服务端。
测试的代码主要功能:开启一个tcp服务器.然后设置了管理进程和工作进程start的回调进行更名.设置了pid_file保存了服务端启动的mast进程. <?php //创建Server对象,监听 ...
- github分支规范
转自:https://www.cnblogs.com/xuld 一.目的 我们制定分支规范,意在实现以下目标: 减少沟通成本:开发者可以很清晰地知道需要修改的代码位于哪个分支. 减少 bug 隐患:避 ...
- hive资料
Hive基本操作 Hive 解锁操作 之前使用Hive,出现过一种情况:在代码正在执行insert into或insert overwrite时,中途手动将程序停掉,会出现卡死情况,只能执行查询操作, ...
- ASCII,Unicode 和 UTF-8
ASCII: 英文的编码方式,规定了128个字符的编码,使用了一个字节的后七位表示. Unicode : 每个国家的字符集都不同,世界上所有的字符远远超过128个.Unicode,就是一种所有符号的编 ...
- 实际操作--create DB link
我可以查看6D1数据库中的表了:我在哪个表里创建database说明我想访问database中的表~ SELECT * FROM TEST001MX@TESTLINK1 databa ...
- idea运行固定多个模块项目
第一步:配置workspace.xml 在.idea文件夹下,搜索RunDashboard位置 <component name="RunDashboard"> < ...
- ORB-SLAM2阅读笔记(一)从mono_eourc.cpp出发理解ORB-SLAM2
泡泡机器人上已经有公开课ORB-SLAM2的代码详解了,我也先看了一个多小时的视频,后来发现看完还是迷迷糊糊,自己没看源码,根本不明白讲的什么,因此,打开文件开始阅读源码. 为了阅读逻辑清楚,我从OR ...