android 模仿大众点评团购卷列表多余3条时折叠,点击时显示剩余全部的功能
要实现这样一个效果:加载一组数据,当这组数据的条数超过2条时,则这显示两条,其余的隐藏,当点击“展开全部时”在显示余下的部分。效果如下图所示:
展开前的效果:
展开后的效果
:
实现思路:控制数据而不是控制界面。什么意思呢?当页面加载时,首先判断加载的数据是否大于2,如果小于等于2则直接显示,如果大于2则将前两条数据存入集合,并给adapter赋值,界面上就只会显示两条了,当点击展开全部时,将所有的数据填充到adapter中,并刷新adapter即可。
下面是实现的主要代码:
- FlexibleListActivity.java
- package cn.yw.lib.flexible;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ListView;
- import android.widget.TextView;
- import cn.yw.lib.R;
- public class FlexibleListActivity extends Activity implements OnClickListener {
- private ListView listView;
- private TextView tv;
- private FlexibleAdapter adapter = null;
- private List<String> datas = new ArrayList<String>();
- private List<String> newDatas = new ArrayList<String>();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.flexiblelistview_layout);
- intViews();
- }
- private void initDatas(){
- datas.add("小西点餐厅");
- datas.add("喜事蛋糕");
- datas.add("烤香肠");
- datas.add("火锅");
- datas.add("小笼包");
- }
- /**
- * 第一次加载数据时,如果数据超出3条则只显示前3条。
- * 点击下面的按钮显示全部。
- */
- private void firstLoad(){
- newDatas.addAll(datas.subList(0, 2));
- // newDatas.subList(start, end)
- }
- private void intViews() {
- initDatas();//初始化数据
- firstLoad();//显示第一次要加载的数据
- listView = (ListView) findViewById(R.id.flexible_listview);
- adapter = new FlexibleAdapter();
- adapter.setList(newDatas);
- listView.setAdapter(adapter);
- tv = (TextView) findViewById(R.id.flexible_tv);
- tv.setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.flexible_tv:
- adapter.setList(datas);//显示所有数据
- adapter.notifyDataSetChanged();
- tv.setVisibility(View.GONE);
- break;
- }
- }
- /**
- * ListView适配器
- * @author tony
- *
- */
- class FlexibleAdapter extends BaseAdapter {
- private List<String> datas = new ArrayList<String>();
- public void setList(List<String> datas) {
- this.datas = datas;
- }
- @Override
- public int getCount() {
- return datas.size();
- }
- @Override
- public Object getItem(int arg0) {
- return datas.get(arg0);
- }
- @Override
- public long getItemId(int arg0) {
- return arg0;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup arg2) {
- ViewHolder holder = null;
- if (convertView == null) {
- convertView = LayoutInflater.from(FlexibleListActivity.this)
- .inflate(R.layout.flexiblelistview_item, null);
- holder = new ViewHolder();
- holder.tv = (TextView) convertView
- .findViewById(R.id.flexible_item_tv);
- convertView.setTag(holder);
- } else {
- holder = (ViewHolder) convertView.getTag();
- }
- holder.tv.setText(datas.get(position));
- return convertView;
- }
- class ViewHolder {
- TextView tv;
- }
- }
- }
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="vertical" >
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <ListView
- android:id="@+id/flexible_listview"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- </ListView>
- <TextView
- android:id="@+id/flexible_tv"
- android:layout_width="fill_parent"
- android:gravity="center"
- android:layout_height="wrap_content"
- android:text="展开显示全部" />
- </LinearLayout>
- </LinearLayout>
item文件
- <?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="vertical" >
- <TextView
- android:id="@+id/flexible_item_tv"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:drawableLeft="@drawable/ic_launcher"
- android:layout_marginLeft="5dip"
- android:drawablePadding="10dip"
- />
- </LinearLayout>
代码的实现效果:
android 模仿大众点评团购卷列表多余3条时折叠,点击时显示剩余全部的功能的更多相关文章
- android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决
在输入框中加入android:imeOptions="actionSearch",调用软键盘时,回车键就会显示搜索二字. 我想在点击搜索时,跳转到下一个页面,但是调用setOnKe ...
- android中实现在矩形框中输入文字,可以显示剩余字数的功能
虽然这两个功能都比较简单,但是在实际app开发中真的很常见,特别是显示字数或剩余字数这个功能 如下图: 要实现上面的功能,需要做到三点: 1.实现矩形框布局 思路就是矩形框作为整个布局的一个backg ...
- Android模仿iOS iMessages10照片选择器的实现
不知不觉已经接近半年多没有写过博客了,这段时间,也是我刚好毕业走出校园的时间,由于学习工作的原因,一直没有真正静下心来写下些什么东西.这个星期刚入了小米笔记本pro的坑,本着新电脑新生活的理念嘻嘻-- ...
- Android实现SQLite数据库联系人列表
Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...
- Android水平(横向)翻页列表,类似水平GridVIew
Android水平(横向)翻页列表,类似于水平方向的GridView,行列自定义,但要翻页切换,考虑加载性能,当Item数据很多时加载和翻页要流畅,翻页时要有动画效果,效果图如下: 实现方式: 1:翻 ...
- Android学习系列(15)--App列表之游标ListView(索引ListView)
游标ListView,提供索引标签,使用户能够快速定位列表项. 也可以叫索引ListView,有的人称也为Tweaked ListView,可能更形象些吧. 一看图啥都懂了: 1. ...
- 如何获得Android手机的软件安装列表
Android的PackageManager类用于检索目前安装在设备上的应用软件包的信息.你可以通过调用getpackagemanager()得到PackageManager类的一个实例.对查询和操作 ...
- Android学习系列(17)--App列表之圆角ListView(续)
http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html 本来这篇文章想并到上篇Android学习系列(16)- ...
- Android学习系列(11)--App列表之拖拽ListView(下)
接着上篇Android学习系列(10)--App列表之拖拽ListView(上)我们继续实现ListView的拖拽效果. 7.重写onTouchEvent()方法. 在这个方法中我们主要是处理 ...
随机推荐
- 【Mybatis】多对多实例
①创建数据库和表,数据库为mytest,表为users.orders和users_orders DROP TABLE IF EXISTS users; CREATE TABLE users( id I ...
- 设计模式之适配器模式(Adapter)(6)
简介 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用呢? ...
- web print
<!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- [转]Serif和Sans-serif字体的区别
在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Monospace这一种类,例如在Web中,表示代 ...
- 2017-07-29 中文代码示例教程之Java编程一天入门
Java编程一天入门 v0.0.1 alpha 共享协议 本作使用署名-非商业使用-禁止演绎协议共享. 前言 Java入门代码用中文写(举例如下)更能被新手理解. 由于至今没有看到类似教程, 在此抛砖 ...
- 【代码笔记】Web-ionic 网格(Grid)
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- python小练习:用户三次登陆, 购物车
2018.12.1 周末练习: 1.用户三次登陆 from random import randint i = 1 while i < 4: num = 0 verify_code = '' w ...
- java 约束配置文件和本地约束
一.寻找spring配置文件约束头(也可直接复制已有的) 1.在本地文件夹解压spring核心包(dist) 例:核心包的约束位置(D:\JavaSources\spring-framework-4. ...
- Angular基础(四) 创建Angular应用
应用(Application)是由组件构成的树.树的根部是最顶层的组件即应用本身,启动的时候,浏览器会最先渲染顶层组件,然后根据树形结构,迭代渲染子组件.组件是可装配的,可以互相组合以构成更大的组件. ...
- Yii1.1.16学习记录
最近工作中用到Yii框架,为此专门在网上找了些相关教程学一下,尽管教程比较老,但学完后至少对Yii框架有了基本了解,特别是widget的使用,感觉Yii真的很强大. 一.框架介绍与安装 框架源码下载 ...