要实现这样一个效果:加载一组数据,当这组数据的条数超过2条时,则这显示两条,其余的隐藏,当点击“展开全部时”在显示余下的部分。效果如下图所示:

展开前的效果:

展开后的效果

实现思路:控制数据而不是控制界面。什么意思呢?当页面加载时,首先判断加载的数据是否大于2,如果小于等于2则直接显示,如果大于2则将前两条数据存入集合,并给adapter赋值,界面上就只会显示两条了,当点击展开全部时,将所有的数据填充到adapter中,并刷新adapter即可。

下面是实现的主要代码:

  1. FlexibleListActivity.java
  1. package cn.yw.lib.flexible;
  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.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.ViewGroup;
  12. import android.widget.BaseAdapter;
  13. import android.widget.ListView;
  14. import android.widget.TextView;
  15. import cn.yw.lib.R;
  16.  
  17. public class FlexibleListActivity extends Activity implements OnClickListener {
  18. private ListView listView;
  19. private TextView tv;
  20. private FlexibleAdapter adapter = null;
  21. private List<String> datas = new ArrayList<String>();
  22. private List<String> newDatas = new ArrayList<String>();
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.flexiblelistview_layout);
  27. intViews();
  28. }
  29. private void initDatas(){
  30. datas.add("小西点餐厅");
  31. datas.add("喜事蛋糕");
  32. datas.add("烤香肠");
  33. datas.add("火锅");
  34. datas.add("小笼包");
  35. }
  36. /**
  37. * 第一次加载数据时,如果数据超出3条则只显示前3条。
  38. * 点击下面的按钮显示全部。
  39. */
  40. private void firstLoad(){
  41. newDatas.addAll(datas.subList(0, 2));
  42. // newDatas.subList(start, end)
  43. }
  44. private void intViews() {
  45. initDatas();//初始化数据
  46. firstLoad();//显示第一次要加载的数据
  47. listView = (ListView) findViewById(R.id.flexible_listview);
  48. adapter = new FlexibleAdapter();
  49. adapter.setList(newDatas);
  50. listView.setAdapter(adapter);
  51. tv = (TextView) findViewById(R.id.flexible_tv);
  52. tv.setOnClickListener(this);
  53. }
  54.  
  55. @Override
  56. public void onClick(View v) {
  57. switch (v.getId()) {
  58. case R.id.flexible_tv:
  59. adapter.setList(datas);//显示所有数据
  60. adapter.notifyDataSetChanged();
  61. tv.setVisibility(View.GONE);
  62. break;
  63. }
  64. }
  65. /**
  66. * ListView适配器
  67. * @author tony
  68. *
  69. */
  70. class FlexibleAdapter extends BaseAdapter {
  71. private List<String> datas = new ArrayList<String>();
  72.  
  73. public void setList(List<String> datas) {
  74. this.datas = datas;
  75. }
  76.  
  77. @Override
  78. public int getCount() {
  79. return datas.size();
  80. }
  81.  
  82. @Override
  83. public Object getItem(int arg0) {
  84. return datas.get(arg0);
  85. }
  86.  
  87. @Override
  88. public long getItemId(int arg0) {
  89. return arg0;
  90. }
  91.  
  92. @Override
  93. public View getView(int position, View convertView, ViewGroup arg2) {
  94. ViewHolder holder = null;
  95. if (convertView == null) {
  96. convertView = LayoutInflater.from(FlexibleListActivity.this)
  97. .inflate(R.layout.flexiblelistview_item, null);
  98. holder = new ViewHolder();
  99. holder.tv = (TextView) convertView
  100. .findViewById(R.id.flexible_item_tv);
  101. convertView.setTag(holder);
  102. } else {
  103. holder = (ViewHolder) convertView.getTag();
  104. }
  105. holder.tv.setText(datas.get(position));
  106. return convertView;
  107. }
  108.  
  109. class ViewHolder {
  110. TextView tv;
  111. }
  112. }
  113. }

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="vertical" >
  6.  
  7. <LinearLayout
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:orientation="vertical" >
  11.  
  12. <ListView
  13. android:id="@+id/flexible_listview"
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content" >
  16. </ListView>
  17.  
  18. <TextView
  19. android:id="@+id/flexible_tv"
  20. android:layout_width="fill_parent"
  21. android:gravity="center"
  22. android:layout_height="wrap_content"
  23. android:text="展开显示全部" />
  24. </LinearLayout>
  25.  
  26. </LinearLayout>

item文件

  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="vertical" >
  6. <TextView
  7. android:id="@+id/flexible_item_tv"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:gravity="center_vertical"
  11. android:drawableLeft="@drawable/ic_launcher"
  12. android:layout_marginLeft="5dip"
  13. android:drawablePadding="10dip"
  14. />
  15.  
  16. </LinearLayout>

代码的实现效果:

android 模仿大众点评团购卷列表多余3条时折叠,点击时显示剩余全部的功能的更多相关文章

  1. android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决

    在输入框中加入android:imeOptions="actionSearch",调用软键盘时,回车键就会显示搜索二字. 我想在点击搜索时,跳转到下一个页面,但是调用setOnKe ...

  2. android中实现在矩形框中输入文字,可以显示剩余字数的功能

    虽然这两个功能都比较简单,但是在实际app开发中真的很常见,特别是显示字数或剩余字数这个功能 如下图: 要实现上面的功能,需要做到三点: 1.实现矩形框布局 思路就是矩形框作为整个布局的一个backg ...

  3. Android模仿iOS iMessages10照片选择器的实现

    不知不觉已经接近半年多没有写过博客了,这段时间,也是我刚好毕业走出校园的时间,由于学习工作的原因,一直没有真正静下心来写下些什么东西.这个星期刚入了小米笔记本pro的坑,本着新电脑新生活的理念嘻嘻-- ...

  4. Android实现SQLite数据库联系人列表

    Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...

  5. Android水平(横向)翻页列表,类似水平GridVIew

    Android水平(横向)翻页列表,类似于水平方向的GridView,行列自定义,但要翻页切换,考虑加载性能,当Item数据很多时加载和翻页要流畅,翻页时要有动画效果,效果图如下: 实现方式: 1:翻 ...

  6. Android学习系列(15)--App列表之游标ListView(索引ListView)

    游标ListView,提供索引标签,使用户能够快速定位列表项.      也可以叫索引ListView,有的人称也为Tweaked ListView,可能更形象些吧.      一看图啥都懂了: 1. ...

  7. 如何获得Android手机的软件安装列表

    Android的PackageManager类用于检索目前安装在设备上的应用软件包的信息.你可以通过调用getpackagemanager()得到PackageManager类的一个实例.对查询和操作 ...

  8. Android学习系列(17)--App列表之圆角ListView(续)

    http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html   本来这篇文章想并到上篇Android学习系列(16)- ...

  9. Android学习系列(11)--App列表之拖拽ListView(下)

    接着上篇Android学习系列(10)--App列表之拖拽ListView(上)我们继续实现ListView的拖拽效果. 7.重写onTouchEvent()方法.     在这个方法中我们主要是处理 ...

随机推荐

  1. 【Mybatis】多对多实例

    ①创建数据库和表,数据库为mytest,表为users.orders和users_orders DROP TABLE IF EXISTS users; CREATE TABLE users( id I ...

  2. 设计模式之适配器模式(Adapter)(6)

    简介 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用呢? ...

  3. web print

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  4. [转]Serif和Sans-serif字体的区别

    在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Monospace这一种类,例如在Web中,表示代 ...

  5. 2017-07-29 中文代码示例教程之Java编程一天入门

    Java编程一天入门 v0.0.1 alpha 共享协议 本作使用署名-非商业使用-禁止演绎协议共享. 前言 Java入门代码用中文写(举例如下)更能被新手理解. 由于至今没有看到类似教程, 在此抛砖 ...

  6. 【代码笔记】Web-ionic 网格(Grid)

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. python小练习:用户三次登陆, 购物车

    2018.12.1 周末练习: 1.用户三次登陆 from random import randint i = 1 while i < 4: num = 0 verify_code = '' w ...

  8. java 约束配置文件和本地约束

    一.寻找spring配置文件约束头(也可直接复制已有的) 1.在本地文件夹解压spring核心包(dist) 例:核心包的约束位置(D:\JavaSources\spring-framework-4. ...

  9. Angular基础(四) 创建Angular应用

    应用(Application)是由组件构成的树.树的根部是最顶层的组件即应用本身,启动的时候,浏览器会最先渲染顶层组件,然后根据树形结构,迭代渲染子组件.组件是可装配的,可以互相组合以构成更大的组件. ...

  10. Yii1.1.16学习记录

    最近工作中用到Yii框架,为此专门在网上找了些相关教程学一下,尽管教程比较老,但学完后至少对Yii框架有了基本了解,特别是widget的使用,感觉Yii真的很强大. 一.框架介绍与安装 框架源码下载 ...