(转载) listview实现微信朋友圈嵌套

版权声明:本文为博主原创文章,未经博主允许不得转载。
项目下载:https://github.com/Victoria0316/NestListview/tree/master
在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题。其实,主要解决里面那一层的listview的高度计算就可以,外面那一层listview自动计算。
实现效果图
这上面效果图的监听两层都有,以及外面的button都可以。够多样化吧。
3、ChildListView
- package com.nest.view;
- import android.content.Context;
- import android.util.AttributeSet;
- import android.widget.ListView;
- public class ChildListView extends ListView {
- public ChildListView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- // TODO Auto-generated constructor stub
- }
- public ChildListView(Context context, AttributeSet attrs) {
- super(context, attrs);
- // TODO Auto-generated constructor stub
- }
- public ChildListView(Context context) {
- super(context);
- // TODO Auto-generated constructor stub
- }
- @Override
- public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, expandSpec);
- }
- }
里面listview的高度的计算。
4、外面那层listview的适配器ParentAdapt
- package com.nest.adapt;
- import java.util.ArrayList;
- import java.util.List;
- import android.content.Context;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.View.OnClickListener;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.nest.activity.R;
- import com.nest.base.BaseObjectListAdapter;
- import com.nest.entity.Entity;
- import com.nest.entity.ShowEntity;
- /**
- * 父listview适配器
- * @author mmsx
- *
- */
- public class ParentAdapt extends BaseObjectListAdapter{
- private ArrayList<ShowEntity> mChildList;
- public static int mParentItem = -1;
- public static boolean mbShowChild = false;
- public ParentAdapt(Context context, List<? extends Entity> datas) {
- super(context, datas);
- initData();
- }
- private void initData() {
- mChildList = new ArrayList<ShowEntity>();
- mChildList.clear();
- for (int i = 0; i < 5; i++) {
- ShowEntity tempEntity = new ShowEntity("字标题" + String.valueOf(i), "内容");
- mChildList.add(tempEntity);
- }
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder vHolder = null;
- if (convertView == null) {
- vHolder = new ViewHolder();
- convertView = mInflater.inflate(R.layout.activity_main_list_item, null);
- vHolder.textViewTitle = (TextView)convertView.findViewById(R.id.textView_1);
- vHolder.textViewContent= (TextView)convertView.findViewById(R.id.textView_2);
- vHolder.listViewItem = (ListView)convertView.findViewById(R.id.listView_child);
- vHolder.buttonStake = (Button)convertView.findViewById(R.id.button_1);
- convertView.setTag(vHolder);
- }else {
- vHolder = (ViewHolder) convertView.getTag();
- }
- ShowEntity tempEntity = (ShowEntity) mDatas.get(position);
- vHolder.textViewTitle.setText(tempEntity.getTitle());
- vHolder.textViewContent.setText(tempEntity.getContent());
- //点击那个弹出那个,如果已经弹出就收回子listview
- if (mParentItem == position && mbShowChild) {
- //子listview实在这里加载数据的
- ChildAdapt tempAdapt = new ChildAdapt(mContext, mChildList);
- vHolder.listViewItem.setAdapter(tempAdapt);
- vHolder.listViewItem.setVisibility(View.VISIBLE);
- //子listview的点击监听
- vHolder.listViewItem.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- Toast.makeText(mContext, "Child Listview" + String.valueOf(position), Toast.LENGTH_SHORT).show();
- }
- });
- }else {
- vHolder.listViewItem.setVisibility(View.GONE);
- }
- vHolder.buttonStake.setOnClickListener(new ParentButtonLisener());
- //记住是那个button事件
- vHolder.buttonStake.setTag(position);
- return convertView;
- }
- class ViewHolder{
- TextView textViewTitle;
- TextView textViewContent;
- ListView listViewItem;
- Button buttonStake;
- }
- //父listview的button的监听
- private class ParentButtonLisener implements OnClickListener{
- @Override
- public void onClick(View v) {
- Integer nPosition = (Integer) (v.getTag());
- Toast.makeText(mContext, "提示" + String.valueOf(nPosition.intValue()), Toast.LENGTH_SHORT).show();
- }
- }
- }
5、里面那层listview的适配器ChildAdapt
- package com.nest.adapt;
- import java.util.List;
- import android.content.Context;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- import com.nest.activity.R;
- import com.nest.base.BaseObjectListAdapter;
- import com.nest.entity.Entity;
- import com.nest.entity.ShowEntity;
- /**
- * 子listview适配器
- * @author mmsx
- *
- */
- public class ChildAdapt extends BaseObjectListAdapter{
- public ChildAdapt(Context context, List<? extends Entity> datas) {
- super(context, datas);
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder vHolder = null;
- if (convertView == null) {
- vHolder = new ViewHolder();
- convertView = mInflater.inflate(R.layout.activity_main_list_item_1, null);
- vHolder.textViewTitle = (TextView)convertView.findViewById(R.id.textView_1);
- vHolder.textViewContent= (TextView)convertView.findViewById(R.id.textView_2);
- convertView.setTag(vHolder);
- }else {
- vHolder = (ViewHolder) convertView.getTag();
- }
- ShowEntity tempEntity = (ShowEntity) mDatas.get(position);
- vHolder.textViewTitle.setText(tempEntity.getTitle());
- vHolder.textViewContent.setText(tempEntity.getContent());
- return convertView;
- }
- class ViewHolder{
- TextView textViewTitle;
- TextView textViewContent;
- }
- }
6、实现调用MainActivity
- package com.nest.activity;
- import java.util.ArrayList;
- import com.nest.adapt.ParentAdapt;
- import com.nest.entity.ShowEntity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.ListView;
- import android.app.Activity;
- /**
- * listview嵌套listview实现效果
- * @author mmsx
- *
- */
- public class MainActivity extends Activity {
- private ParentAdapt mParentAdapt;
- private ArrayList<ShowEntity> mParentList;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initData();
- initView();
- }
- private void initData() {
- mParentList = new ArrayList<ShowEntity>();
- mParentList.clear();
- for (int i = 0; i < 20; i++) {
- ShowEntity tempEntity = new ShowEntity("标题" + String.valueOf(i), "内容");
- mParentList.add(tempEntity);
- }
- }
- private void initView() {
- ListView listView = (ListView)findViewById(R.id.listView1);
- mParentAdapt = new ParentAdapt(this, mParentList);
- listView.setAdapter(mParentAdapt);
- listView.setOnItemClickListener(new AdaptItemClick());
- //长按listview就不写示范了
- // listView.setOnItemLongClickListener(listener);
- }
- //父listview的单击事件的监听
- private class AdaptItemClick implements OnItemClickListener{
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id) {
- if (ParentAdapt.mParentItem == position && ParentAdapt.mbShowChild) {
- ParentAdapt.mbShowChild = false;
- }else {
- ParentAdapt.mbShowChild = true;
- }
- ParentAdapt.mParentItem = position;
- mParentAdapt.notifyDataSetChanged();
- }
- }
- }
- 顶
- 0
- 踩
- 0
(转载) listview实现微信朋友圈嵌套的更多相关文章
- Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。
转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...
- iOS版微信朋友圈数据库的简要分析
本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4550523.html 之前写了一些关于微信聊天记录的博文之后,不少 ...
- 仿QQ空间和微信朋友圈,高解耦高复用高灵活
先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...
- 分享:android图片浏览器—类微信朋友圈相片浏览【android代码下载】
今天给大家分享个android图片/相册浏览器,类似微信朋友圈相片浏览,可以左右滑动,可以双击放大,捏拉放大 效果如下:<ignore_js_op> device-2013-09-04-1 ...
- python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。
昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 看不下去了,我支持996,年轻人就该996! 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第一 ...
- Android NineGridLayout — 仿微信朋友圈和QQ空间的九宫格图片展示自定义控件
NineGridLayout 一个仿微信朋友圈和QQ空间的九宫格图片展示自定义控件. GitHub:https://github.com/HMY314/NineGridLayout 一.介绍 1.当只 ...
- android 滚动栏下拉反弹的效果(相似微信朋友圈)
微信朋友圈上面的图片封面,QQ空间说说上面的图片封面都有下拉反弹的效果,这些都是使用滚动栏实现的.下拉,当松开时候.反弹至原来的位置.下拉时候能看到背景图片.那么这里简介一下这样的效果的实现. 本文源 ...
- iOS燃烧动画、3D视图框架、天气动画、立体相册、微信朋友圈小视频等源码
iOS精选源码 iOS天气动画,包括太阳,云,雨,雷暴,雪动画. 较为美观的多级展开列表 3D立体相册,可以旋转的立方体 一个仪表盘Demo YGDashboardView 一个基于UIScrollV ...
- 域名在微信朋友圈内分享需要ICP备案 杜绝不良信息传播
就在刚刚,腾讯微信团队发布公告表示域名在朋友圈内分享需要ICP备案,杜绝打击不良互联网信息的传播.公告称根据互联网管理相关规定,即日起在微信朋友圈内分享的域名,请在2014年12月31日前完成ICP备 ...
随机推荐
- 六星经典CSAPP笔记系列 - 作者:西代零零发
六星经典CSAPP笔记(1)计算机系统巡游 六星经典CSAPP笔记(2)信息的操作和表示 六星经典CSAPP-笔记(3)程序的机器级表示
- npm一点点
写在开头 要抓紧学习了,不然要遭... 月底之前有大量东西要学习,干 npm 包管理工具 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并安装别人编写的命令行程序 ...
- MVC 先后顺序
@foreach (var item in Model) { if (ViewBag.GetModel.ParentID == item.DictID) { <option value=&quo ...
- Java中成员变量和局部变量区别
在类中的位置不同 重点 成员变量:类中,方法外 局部变量:方法中或者方法声明上(形式参数) 作用范围不一样 重点 成员变量:类中 局部变量:方法中 初始化值的不同 重点 成员变量:有默认值 局部变量: ...
- IDEA使用GsonFormat完成JSON和JavaBean之间的转换
原文地址:https://www.leshalv.net/posts/12625/ 前言: 之前处理接口传来的一堆数据,用jsonObject很难受,后面就用gosn来弄,配合这个工具体验很好. 转: ...
- 洛谷P1428 小鱼比可爱
题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个"比可爱"比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只 ...
- [luogu2585 ZJOI2006] 三色二叉树 (树形dp)
传送门 Description Input 输入文件名:TRO.IN 输入文件仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件名:TRO.OUT 输出文件也只有一行,包 ...
- java基础口述
1:什么是变量?变量的定义格式?要使用变量需要注意什么? 在程序运行过程中,其值是可以在某个范围内发生改变的量. 变量其实就是内存中一小块区域. 由3部分组成: 1,数据类型: 限定变量的取值 2,变 ...
- PHP 中 call_user_func 的使用
call_user_func函数类似于一种特别的调用函数的方法,使用方法如下 第一种情况: function set_max($a,$b) { if($a>$b) echo $a; else e ...
- CentOS中防火墙相关的命令(CentOS7中演示)
CentOS中防火墙程序主要是firewall和iptables,CentOS7中firewall服务已经默认安装好了,而iptables服务需要自己用yum install iptabes-se ...