可伸缩展示的ListView

【声明】此文出自指尖飞落的博客:http://blog.csdn.net/huntersnail

公司的项目是社区购物商城(o2o),大量的需要用到ListView的各种效果,ListView展开收起、头部(Head)和子部(Item)这种结构的ListView,特别是第二种用得最多。写过很多次了,在这里写记录一下自己的笔记,也希望能帮助到有需要的Coder。

一、首先上几种效果:

① ListView点击展开收起

② 头部(Head)和子部(Item)的ListView

 Android 的系统组件ExpandableListView

相比较,三种ListView的效果都比较相似,第一种实现起来最简单,第二种比较复杂一点,第三种系统提供的拿过来直接用就可以,原始的样式非常Low,可以自己修改一下。


、主要介绍:ListView点击展开收起的效果(第一种)

这篇博文主要介绍的是第一种ListView点击展开收起的效果,其他几种会在接下来的的博文中介绍。我们知道在BaseAdapter中有一个getCount()的方法,这个方法大家都不陌生,就是数据的数量值,这种简单的ListView点击展开收起的效果就是利用这个方法来做文章的。下面我们来看代码:

1、Activity

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import android.os.Bundle;  
  5. import android.app.Activity;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.ImageView;  
  9. import android.widget.ListView;  
  10.   
  11. /** 
  12.  * 主页 
  13.  *  
  14.  * @author Endoon 2016-1-26 16:57:34 
  15.  */  
  16. public class MainActivity extends Activity {  
  17.     private MyAdapter myAdapter;  
  18.     private ListView listView;  
  19.     private List<String> list;  
  20.     private View footView;  
  21.     private ImageView ivDown;  
  22.   
  23.     @Override  
  24.     protected void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.activity_main);  
  27.         listView = (ListView) findViewById(R.id.listview);  
  28.         // 获得页脚布局  
  29.         footView = getLayoutInflater().inflate(R.layout.view_foot, null);  
  30.         ivDown = (ImageView) footView.findViewById(R.id.iv_down);  
  31.   
  32.         initData();  
  33.   
  34.         initEvent();  
  35.     }  
  36.   
  37.     /** 
  38.      * 初始化数据 
  39.      */  
  40.     private void initData() {  
  41.         // 初始化模拟数据  
  42.         simulateData();  
  43.   
  44.         // 添加页脚视图  
  45.         listView.addFooterView(footView);  
  46.         ivDown.setImageDrawable(getResources()  
  47.                 .getDrawable(R.drawable.icon_down));  
  48.   
  49.         // 适配  
  50.         myAdapter = new MyAdapter(MainActivity.this, list);  
  51.         listView.setAdapter(myAdapter);  
  52.     }  
  53.   
  54.     /** 
  55.      * 初始化点击事件 
  56.      */  
  57.     private void initEvent() {  
  58.         ivDown.setOnClickListener(new OnClickListener() {  
  59.   
  60.             @Override  
  61.             public void onClick(View view) {  
  62.                 // 判断getCount()数据的数量,如果等于3点击后就设置getCount()为全部数量,设置修改标识,刷新。  
  63.                 // 否则,相反。  
  64.                 if (myAdapter.getCount() == 3) {  
  65.                     myAdapter.addItemNum(list.size());  
  66.                     ivDown.setImageDrawable(getResources().getDrawable(  
  67.                             R.drawable.icon_up));  
  68.                     myAdapter.notifyDataSetChanged();  
  69.                 } else {  
  70.                     myAdapter.addItemNum(3);  
  71.                     ivDown.setImageDrawable(getResources().getDrawable(  
  72.                             R.drawable.icon_down));  
  73.                     myAdapter.notifyDataSetChanged();  
  74.                 }  
  75.             }  
  76.         });  
  77.     }  
  78.   
  79.     /** 
  80.      * 模拟数据 
  81.      *  
  82.      * @return 
  83.      */  
  84.     private List<String> simulateData() {  
  85.         list = new ArrayList<String>();  
  86.         for (int i = 0; i < 10; i++) {  
  87.             String circleStr = "蓝色威尼斯城" + (i + 1) + "座";  
  88.             list.add(circleStr);  
  89.         }  
  90.         return list;  
  91.     }  
  92.   
  93. }  
注意:这里的3是自定义的,可以根据自己实际项目需求修改。

2、Adapter

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.util.List;  
  2.   
  3. import android.content.Context;  
  4. import android.view.LayoutInflater;  
  5. import android.view.View;  
  6. import android.view.ViewGroup;  
  7. import android.widget.BaseAdapter;  
  8. import android.widget.TextView;  
  9.   
  10. public class MyAdapter extends BaseAdapter {  
  11.   
  12.     private List<String> list;  
  13.     private LayoutInflater inflater;  
  14.     private int itemCount = 3;  
  15.   
  16.     public MyAdapter(Context context, List<String> list) {  
  17.         this.list = list;  
  18.         inflater = LayoutInflater.from(context);  
  19.     }  
  20.   
  21.     @Override  
  22.     public int getCount() {  
  23.         // 这里是关键  
  24.         // 如果数据数量大于3,只显示3条数据。这里数量自己定义。  
  25.         // 否则,显示全部数量。  
  26.         if (list.size() > 3)  
  27.         {  
  28.             return itemCount;  
  29.         }else   
  30.         {  
  31.             return list.size();  
  32.         }  
  33.     }  
  34.   
  35.     @Override  
  36.     public Object getItem(int position) {  
  37.         return list.get(position);  
  38.     }  
  39.   
  40.     @Override  
  41.     public long getItemId(int position) {  
  42.         return position;  
  43.     }  
  44.   
  45.     @Override  
  46.     public View getView(int position, View convertView, ViewGroup parent) {  
  47.         ViewHolder viewHolder = null;  
  48.           
  49.         if (convertView == null) {  
  50.             viewHolder = new ViewHolder();  
  51.             convertView = inflater.inflate(R.layout.item_simple_listview, null);  
  52.             viewHolder.tvCircleName = (TextView) convertView.findViewById(R.id.tv_circie_name);  
  53.             convertView.setTag(viewHolder);  
  54.         }else   
  55.         {  
  56.             viewHolder = (ViewHolder) convertView.getTag();  
  57.         }  
  58.         viewHolder.tvCircleName.setText(list.get(position));  
  59.         return convertView;  
  60.     }  
  61.       
  62.     class ViewHolder  
  63.     {  
  64.         TextView tvCircleName;  
  65.     }  
  66.       
  67.     /** 
  68.      * 点击后设置Item的数量 
  69.      * @param number 
  70.      */  
  71.     public void addItemNum(int number)  
  72.     {  
  73.         itemCount = number;  
  74.     }  
  75. }  
通过,公共方法addItemNum来修改getCount()的显示,这里起了主要作用!

三、总结

由于项目比较急,所以就用了这种很简单的方法实现,基本上满足了需求。在这里只做了三件事:

① 添加页脚视图。

② 点击页脚视图时,进行判断显示。

③ 修改Adapter的getCount()的值。

代码很简单,总共不过200行,相信大家都能看懂。Over!!!

四、Demo效果图

点击下载源码


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆转载请注明出处☞指尖飞落的博客☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值