我们知道,如果采用官方的ListView,实现的功能在很多时候,并不能满足自己的业务需求,比如在设计到复杂的列表的时候,这一节,我们就开始动手自己实现自定义的ListView.

在上一节中,我们采用了固定的ListView中的数据集,我们对其进行改造;我们重新设置一个ListView的一个模板

template_sort.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="horizontal" >
  6.  
  7. <TextView
  8. android:id="@+id/tvSortID"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_marginLeft="10dp"
  12. android:text="1"
  13. android:textSize="24sp" />
  14.  
  15. <TextView
  16. android:id="@+id/tvSortName"
  17. android:layout_width="wrap_content"
  18. android:layout_height="25dp"
  19. android:layout_marginLeft="10dp"
  20. android:text="内容"
  21. android:textSize="24sp" />
  22.  
  23. </LinearLayout>

我们还需要自己添加一个业务bean,起名叫PSort类

  1. package com.example.bean;
  2.  
  3. public class PSort {
  4. //分类ID
  5.      private int id;
  6.      //分类名称   private String name;
  7.  
  8. public int getId() {
  9. return id;
  10. }
  11. public void setId(int id) {
  12. this.id = id;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. }

如果自定义ListView,我们还需要自己定义一个适配器,这里我起名叫MySortAdapter

  1. package com.example.adapter;
  2.  
  3. import java.util.List;
  4.  
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.os.Handler;
  8. import android.os.Message;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.view.ViewGroup;
  13. import android.widget.BaseAdapter;
  14. import android.widget.TextView;
  15. import android.widget.Toast;
  16.  
  17. import com.example.bean.PSort;
  18. import com.example.slidepaneldemo.R;
  19.  
  20. public class MySortAdapter extends BaseAdapter {
  21.  
  22. private List<PSort> list;
  23.  
  24. private Context context;
  25.      //更新主框架的UI   private Handler mHandle;
  26.  
  27. public MySortAdapter(List<PSort> list,Context context,Handler mHandle)
  28. {
  29. this.list= list;
  30. this.context = context;
  31. this.mHandle = mHandle;
  32. }
  33.  
  34. @Override
  35. public int getCount() {
  36.  
  37. return list.size();
  38. }
  39.  
  40. @Override
  41. public PSort getItem(int position) {
  42.  
  43. return list.get(position);
  44. }
  45.  
  46. @Override
  47. public long getItemId(int position) {
  48.  
  49. return position;
  50. }
  51.  
  52. @Override
  53. public View getView(final int position, View convertView, final ViewGroup parent) {
  54. MyViewHolder myHolder;
  55. if(convertView == null)
  56. {
  57. LayoutInflater inflater = LayoutInflater.from(context);
  58. convertView = inflater.inflate(R.layout.template_sort, null);
  59.  
  60. myHolder = new MyViewHolder();
  61. myHolder.tvSortID = (TextView) convertView.findViewById(R.id.tvSortID);
  62. myHolder.tvSortName = (TextView) convertView.findViewById(R.id.tvSortName);
  63. }
  64. else {
  65. myHolder = (MyViewHolder) convertView.getTag();
  66. }
  67. final PSort pSort = list.get(position);
  68. myHolder.tvSortID.setText(String.valueOf(pSort.getId()));
  69. myHolder.tvSortName.setText(pSort.getName());
  70. myHolder.tvSortName.setOnClickListener(new OnClickListener() {
  71.  
  72. @Override
  73. public void onClick(View view) {
  74.                    // 点击一个Item时,向主框架发送异步信息,来更新数据
  75. Message msg = new Message();
  76. msg.what = position;
  77. mHandle.sendMessage(msg);
  78.  
  79. }
  80. });
  81. return convertView;
  82. }
  83.  
  84. static class MyViewHolder
  85. {
  86. public TextView tvSortID;
  87. public TextView tvSortName;
  88. }
  89.  
  90. }

主框架代码部分:MainActivity.java

  1. package com.example.slidepaneldemo;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.os.Message;
  10. import android.support.v4.widget.SlidingPaneLayout;
  11. import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
  12. import android.view.View;
  13. import android.view.View.OnClickListener;
  14. import android.widget.Button;
  15. import android.widget.ListView;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18.  
  19. import com.example.adapter.MySortAdapter;
  20. import com.example.bean.PSort;
  21.  
  22. public class MainActivity extends Activity implements PanelSlideListener {
  23.  
  24. Button button1;
  25. SlidingPaneLayout slidepanel;
  26. ListView lvItems;
  27. TextView textView1;
  28. List<PSort> list;
  29.  
  30. @Override
  31. protected void onCreate(Bundle savedInstanceState) {
  32. super.onCreate(savedInstanceState);
  33. setContentView(R.layout.activity_main);
  34.  
  35. button1 = (Button)findViewById(R.id.button1);
  36. slidepanel = (SlidingPaneLayout)findViewById(R.id.slidepanel);
  37. lvItems = (ListView)findViewById(R.id.lvItems);
  38. textView1 = (TextView)findViewById(R.id.textView1);
  39.  
  40. list = new ArrayList<PSort>();
  41. for(int i=0;i<5;i++)
  42. {
  43. PSort p = new PSort();
  44. p.setId(i+1);
  45. p.setName("Sort" + String.valueOf(i+1));
  46. list.add(p);
  47. }
  48.  
  49. lvItems.setAdapter(new MySortAdapter(list,this,handler));
  50.  
  51. button1.setOnClickListener(new OnClickListener() {
  52.  
  53. @Override
  54. public void onClick(View arg0) {
  55. if(!slidepanel.isOpen())
  56. {
  57. slidepanel.openPane();
  58. }
  59. else
  60. {
  61. slidepanel.closePane();
  62. }
  63. }
  64. });
  65. }
  66.  
  67. Handler handler = new Handler()
  68. {
  69. @Override
  70. public void handleMessage(Message msg) {
  71. //Toast.makeText(MainActivity.this, "Id:" + msg.what, 1).show();
  72.  
  73. textView1.setText(list.get(msg.what).getName());
  74. slidepanel.closePane();
  75.  
  76. }
  77. };
  78.  
  79. @Override
  80. public void onPanelClosed(View arg0) {
  81. // TODO Auto-generated method stub
  82.  
  83. }
  84.  
  85. @Override
  86. public void onPanelOpened(View arg0) {
  87. // TODO Auto-generated method stub
  88.  
  89. }
  90.  
  91. @Override
  92. public void onPanelSlide(View arg0, float arg1) {
  93. // TODO Auto-generated method stub
  94.  
  95. }
  96.  
  97. }

这个时候,当我们点击左边分类的时候,就可以更新右边的数据啦!

转载请注明http://www.cnblogs.com/yushengbo,否则将追究版权责任!

淘宝(阿里百川)手机客户端开发日记第四篇 自定义ListView详解的更多相关文章

  1. 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解

    我们知道,Android中数据存储技术由于如下几种 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 ...

  2. 淘宝(阿里百川)手机客户端开发日记第十一篇 JSP+Servlet

    由于本人从事.net开发已有多年经验,今天由于工作需要,我只能学习下JSP+Servlet,至于java web提供了更好的开发框架MVC,现在由于时间关系,我只好用JSP+Servlet来搭建服务器 ...

  3. 淘宝(阿里百川)手机客户端开发日记第十篇 阿里百川服务器环境介绍之API文档的快速链接(四)

    个人感觉比较重要的快速链接: http://open.taobao.com/doc/detail.htm?id=102513 http://open.taobao.com/doc/detail.htm ...

  4. 淘宝(阿里百川)手机客户端开发日记第十三篇 mysql的连接

    首先,我建立了一个包,里面存放了三个类文件,这三个文件是我从网络中找的,经过自己的整理.(我刚才查找想把这三个文件传上去,可能是自己对cnblogs的博客不太熟悉吧,没有找到,我只好粘贴代码了) 三个 ...

  5. 淘宝(阿里百川)手机客户端开发日记第八篇 Handler的使用方法

    首先,我们先看下API文档的说明: A Handler allows you to send and process Message and Runnable objects associated w ...

  6. 淘宝(阿里百川)手机客户端开发日记第七篇 Service,Handler和Thread

    现在我们已经已经知道android有Service,Handler和Thread这些内容了,但是我想应该还有很多人对此并不是很清楚他们之间的区别! (1)Service 是运行在后端的程序,不与UI直 ...

  7. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(六)

    Service和Thread的关系 不少初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread? 答案是Service和T ...

  8. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(五)

    我们现在对上一节中的DEMO进行改进,在服务中开启线程来执行. package com.example.service; import android.app.Service; import andr ...

  9. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(四)

    DEMO1:在Activity里声明一个回调方法,当service完成任务后,调用这个回调方法. 首先,我们先继承service,来创建服务,代码如下: package com.example.ser ...

随机推荐

  1. 记录我学github的路程(二)

    2015-12-09 更新 1,现在,本地有了一个库,你可能会想到GitHub创建一个库,并且关联起来.这样,远程的库既可以当作备份,又可以让其他人通过该仓库来协作. 2,步骤: (1)登录GitHu ...

  2. windows API 开发飞机订票系统 图形化界面 (二)

    首先,用到的数据结构的定义.以及全局变量和函数的声明如下: // Flight.c : 定义应用程序的入口点. // #include "stdafx.h" //订单 typede ...

  3. js与jquery的区别

    var html = $('<a target="_blank" href="' + adCompContent.clickURL + '">< ...

  4. 关于Chrome的开发15个小技巧

    一.快速查找文件 如果你使用过Sublime,那么你会知道’Go to anything’的强大.没错,Chrome现在也有了这一功能. 操作如下: 1.F12打开你的Chrome调试器: 2.按下C ...

  5. [BZOJ1876][SDOI2009]superGCD(高精度)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1876 分析: 以为辗转相减会TLE呢……但是好像没这个数据……就这么水过去了…… 辗转 ...

  6. MongoDB 客户端 MongoVue

    直接上图片,图片是按顺序来的 软件下载地址(Windows下的MongoDB客户端MongoVUE 这是最后一个全功能的不收费的版本): http://pan.baidu.com/s/1skYIEq5

  7. 最新 Sublime Text3 激活码 (Build 3114 有效)

    今天打开Sublime Text 3 有更新,更新了一下然后之前的激活就失效了.无奈只好重新搜索可用的激活码.不过幸运的是我搜索到了很多可用的激活码,不敢独专. // Sublime Text 3 L ...

  8. NABCD分析java音乐播放器

    程设计题目:java音乐播放器 一.课程设计目的 1.编程设计音乐播放软件,使之实现音乐播放的功能. 2.培养学生用程序解决实际问题的能力和兴趣. 3.加深java中对多媒体编程的应用. 二.课程设计 ...

  9. Code Hunters: Hello, world!

    大家好!我们是来自MSRA联合培养班的Code Hunters小组,在未来三个月时间里我们将与殷秋丰老师一起学习高级软件工程这门课. 我们小组共有五名分别来自享誉海内外的中国科学技术大学和北京航空航天 ...

  10. 使用 ArcGIS中的ArcObjects进行二次开发

    参考网址:https://blogs.esri.com/esri/arcgis/2012/12/07/arcobjects-or-runtime-sdk/ http://resources.arcgi ...