淘宝(阿里百川)手机客户端开发日记第四篇 自定义ListView详解
我们知道,如果采用官方的ListView,实现的功能在很多时候,并不能满足自己的业务需求,比如在设计到复杂的列表的时候,这一节,我们就开始动手自己实现自定义的ListView.
在上一节中,我们采用了固定的ListView中的数据集,我们对其进行改造;我们重新设置一个ListView的一个模板
template_sort.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/tvSortID" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="1" android:textSize="24sp" /> <TextView android:id="@+id/tvSortName" android:layout_width="wrap_content" android:layout_height="25dp" android:layout_marginLeft="10dp" android:text="内容" android:textSize="24sp" /> </LinearLayout>
我们还需要自己添加一个业务bean,起名叫PSort类
package com.example.bean; public class PSort { //分类ID private int id; //分类名称 private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
如果自定义ListView,我们还需要自己定义一个适配器,这里我起名叫MySortAdapter
package com.example.adapter; import java.util.List; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import android.widget.Toast; import com.example.bean.PSort; import com.example.slidepaneldemo.R; public class MySortAdapter extends BaseAdapter { private List<PSort> list; private Context context; //更新主框架的UI private Handler mHandle; public MySortAdapter(List<PSort> list,Context context,Handler mHandle) { this.list= list; this.context = context; this.mHandle = mHandle; } @Override public int getCount() { return list.size(); } @Override public PSort getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, final ViewGroup parent) { MyViewHolder myHolder; if(convertView == null) { LayoutInflater inflater = LayoutInflater.from(context); convertView = inflater.inflate(R.layout.template_sort, null); myHolder = new MyViewHolder(); myHolder.tvSortID = (TextView) convertView.findViewById(R.id.tvSortID); myHolder.tvSortName = (TextView) convertView.findViewById(R.id.tvSortName); } else { myHolder = (MyViewHolder) convertView.getTag(); } final PSort pSort = list.get(position); myHolder.tvSortID.setText(String.valueOf(pSort.getId())); myHolder.tvSortName.setText(pSort.getName()); myHolder.tvSortName.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // 点击一个Item时,向主框架发送异步信息,来更新数据 Message msg = new Message(); msg.what = position; mHandle.sendMessage(msg); } }); return convertView; } static class MyViewHolder { public TextView tvSortID; public TextView tvSortName; } }
主框架代码部分:MainActivity.java
package com.example.slidepaneldemo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.widget.SlidingPaneLayout; import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.example.adapter.MySortAdapter; import com.example.bean.PSort; public class MainActivity extends Activity implements PanelSlideListener { Button button1; SlidingPaneLayout slidepanel; ListView lvItems; TextView textView1; List<PSort> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button)findViewById(R.id.button1); slidepanel = (SlidingPaneLayout)findViewById(R.id.slidepanel); lvItems = (ListView)findViewById(R.id.lvItems); textView1 = (TextView)findViewById(R.id.textView1); list = new ArrayList<PSort>(); for(int i=0;i<5;i++) { PSort p = new PSort(); p.setId(i+1); p.setName("Sort" + String.valueOf(i+1)); list.add(p); } lvItems.setAdapter(new MySortAdapter(list,this,handler)); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if(!slidepanel.isOpen()) { slidepanel.openPane(); } else { slidepanel.closePane(); } } }); } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { //Toast.makeText(MainActivity.this, "Id:" + msg.what, 1).show(); textView1.setText(list.get(msg.what).getName()); slidepanel.closePane(); } }; @Override public void onPanelClosed(View arg0) { // TODO Auto-generated method stub } @Override public void onPanelOpened(View arg0) { // TODO Auto-generated method stub } @Override public void onPanelSlide(View arg0, float arg1) { // TODO Auto-generated method stub } }
这个时候,当我们点击左边分类的时候,就可以更新右边的数据啦!
转载请注明http://www.cnblogs.com/yushengbo,否则将追究版权责任!
淘宝(阿里百川)手机客户端开发日记第四篇 自定义ListView详解的更多相关文章
- 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解
我们知道,Android中数据存储技术由于如下几种 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 ...
- 淘宝(阿里百川)手机客户端开发日记第十一篇 JSP+Servlet
由于本人从事.net开发已有多年经验,今天由于工作需要,我只能学习下JSP+Servlet,至于java web提供了更好的开发框架MVC,现在由于时间关系,我只好用JSP+Servlet来搭建服务器 ...
- 淘宝(阿里百川)手机客户端开发日记第十篇 阿里百川服务器环境介绍之API文档的快速链接(四)
个人感觉比较重要的快速链接: http://open.taobao.com/doc/detail.htm?id=102513 http://open.taobao.com/doc/detail.htm ...
- 淘宝(阿里百川)手机客户端开发日记第十三篇 mysql的连接
首先,我建立了一个包,里面存放了三个类文件,这三个文件是我从网络中找的,经过自己的整理.(我刚才查找想把这三个文件传上去,可能是自己对cnblogs的博客不太熟悉吧,没有找到,我只好粘贴代码了) 三个 ...
- 淘宝(阿里百川)手机客户端开发日记第八篇 Handler的使用方法
首先,我们先看下API文档的说明: A Handler allows you to send and process Message and Runnable objects associated w ...
- 淘宝(阿里百川)手机客户端开发日记第七篇 Service,Handler和Thread
现在我们已经已经知道android有Service,Handler和Thread这些内容了,但是我想应该还有很多人对此并不是很清楚他们之间的区别! (1)Service 是运行在后端的程序,不与UI直 ...
- 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(六)
Service和Thread的关系 不少初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread? 答案是Service和T ...
- 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(五)
我们现在对上一节中的DEMO进行改进,在服务中开启线程来执行. package com.example.service; import android.app.Service; import andr ...
- 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(四)
DEMO1:在Activity里声明一个回调方法,当service完成任务后,调用这个回调方法. 首先,我们先继承service,来创建服务,代码如下: package com.example.ser ...
随机推荐
- java并发:线程同步机制之Lock
一.初识Lock Lock是一个接口,提供了无条件的.可轮询的.定时的.可中断的锁获取操作,所有加锁和解锁的方法都是显式的,其包路径是:java.util.concurrent.locks.Lock, ...
- 初识Groovy
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代 ...
- php 利用socket发送GET,POST请求
作为php程序员一定会接触http协议,也只有深入了解http协议,编程水平才会更进一步.最近我一直在学习php的关于http的编程,许多东西恍然大悟,受益匪浅.希望分享给大家.本文需要有一定http ...
- Deep Learning 论文解读——Session-based Recommendations with Recurrent Neural Networks
博客地址:http://www.cnblogs.com/daniel-D/p/5602254.html 新浪微博:http://weibo.com/u/2786597434 欢迎多多交流~ Main ...
- javascript继承(六)—实现多继承
在上一篇javascript继承—prototype最优两种继承(空函数和循环拷贝)(3) ,介绍了js较完美继承的两种实现方案,那么下面来探讨一下js里是否有多继承,如何实现多继承.在这里可以看看j ...
- Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs
目录 前言 Express简介和安装 运行第一个基于express框架的Web 模版引擎 ejs express项目结构 express项目分析 app.set(name,value) app.use ...
- 【Moqui业务逻辑翻译系列】--UBPL index
h2. [UBPL Introduction] ubpl介绍h2. [Actor Definitions] 行为定义h2. General Business Process Stories 通常的商业 ...
- NIO提升系统性能
前言 在软件系统中,I/O的速度要比内存的速度慢很多,因此I/O经常会称为系统的瓶颈.所有,提高I/O速度,对于提升系统的整体性能有很大的作用. 在java标准的I/O中,是基于流的I/O的实现,即I ...
- KK录像机破解补丁
KK录像机是由杭州凯凯科技有限公司出品的免费的集游戏录像.视频录制.视频剪辑.添加字幕.添加音乐等功能于一体的高清视频录制软件.操作简单,且兼容录制所有游戏视频,是玩家分享精彩的工具. KK VIP功 ...
- Java基础-常量,变量,成员变量,局部变量
在java中,数据是以常量和变量两种方法形式进行存储和表示的(实际上,所有程序的数据都是这两种形式). 变量 变量代表程序的状态.程序通过改变变量的值来改变整个程序的状态,或者说得更大一些,也就是实现 ...