标签: androidlistview
2016-01-06 00:05 572人阅读 评论(0) 收藏 举报
 分类:
android(8) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

目录(?)[+]

 

项目下载:https://github.com/Victoria0316/NestListview/tree/master

在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题。其实,主要解决里面那一层的listview的高度计算就可以,外面那一层listview自动计算。

实现效果图

这上面效果图的监听两层都有,以及外面的button都可以。够多样化吧。

3、ChildListView

  1. package com.nest.view;
  2. import android.content.Context;
  3. import android.util.AttributeSet;
  4. import android.widget.ListView;
  5. public class ChildListView extends ListView {
  6. public ChildListView(Context context, AttributeSet attrs, int defStyle) {
  7. super(context, attrs, defStyle);
  8. // TODO Auto-generated constructor stub
  9. }
  10. public ChildListView(Context context, AttributeSet attrs) {
  11. super(context, attrs);
  12. // TODO Auto-generated constructor stub
  13. }
  14. public ChildListView(Context context) {
  15. super(context);
  16. // TODO Auto-generated constructor stub
  17. }
  18. @Override
  19. public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  20. int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
  21. super.onMeasure(widthMeasureSpec, expandSpec);
  22. }
  23. }

里面listview的高度的计算。

4、外面那层listview的适配器ParentAdapt

  1. package com.nest.adapt;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.content.Context;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.view.View.OnClickListener;
  8. import android.widget.AdapterView;
  9. import android.widget.AdapterView.OnItemClickListener;
  10. import android.widget.Button;
  11. import android.widget.ListView;
  12. import android.widget.TextView;
  13. import android.widget.Toast;
  14. import com.nest.activity.R;
  15. import com.nest.base.BaseObjectListAdapter;
  16. import com.nest.entity.Entity;
  17. import com.nest.entity.ShowEntity;
  18. /**
  19. * 父listview适配器
  20. * @author mmsx
  21. *
  22. */
  23. public class ParentAdapt extends BaseObjectListAdapter{
  24. private ArrayList<ShowEntity> mChildList;
  25. public static int mParentItem = -1;
  26. public static boolean mbShowChild = false;
  27. public ParentAdapt(Context context, List<? extends Entity> datas) {
  28. super(context, datas);
  29. initData();
  30. }
  31. private void initData() {
  32. mChildList = new ArrayList<ShowEntity>();
  33. mChildList.clear();
  34. for (int i = 0; i < 5; i++) {
  35. ShowEntity tempEntity = new ShowEntity("字标题" + String.valueOf(i), "内容");
  36. mChildList.add(tempEntity);
  37. }
  38. }
  39. @Override
  40. public View getView(int position, View convertView, ViewGroup parent) {
  41. ViewHolder vHolder = null;
  42. if (convertView == null) {
  43. vHolder = new ViewHolder();
  44. convertView = mInflater.inflate(R.layout.activity_main_list_item, null);
  45. vHolder.textViewTitle = (TextView)convertView.findViewById(R.id.textView_1);
  46. vHolder.textViewContent= (TextView)convertView.findViewById(R.id.textView_2);
  47. vHolder.listViewItem = (ListView)convertView.findViewById(R.id.listView_child);
  48. vHolder.buttonStake = (Button)convertView.findViewById(R.id.button_1);
  49. convertView.setTag(vHolder);
  50. }else {
  51. vHolder = (ViewHolder) convertView.getTag();
  52. }
  53. ShowEntity tempEntity = (ShowEntity) mDatas.get(position);
  54. vHolder.textViewTitle.setText(tempEntity.getTitle());
  55. vHolder.textViewContent.setText(tempEntity.getContent());
  56. //点击那个弹出那个,如果已经弹出就收回子listview
  57. if (mParentItem == position && mbShowChild) {
  58. //子listview实在这里加载数据的
  59. ChildAdapt tempAdapt = new ChildAdapt(mContext, mChildList);
  60. vHolder.listViewItem.setAdapter(tempAdapt);
  61. vHolder.listViewItem.setVisibility(View.VISIBLE);
  62. //子listview的点击监听
  63. vHolder.listViewItem.setOnItemClickListener(new OnItemClickListener() {
  64. @Override
  65. public void onItemClick(AdapterView<?> parent, View view,
  66. int position, long id) {
  67. Toast.makeText(mContext, "Child Listview" + String.valueOf(position), Toast.LENGTH_SHORT).show();
  68. }
  69. });
  70. }else {
  71. vHolder.listViewItem.setVisibility(View.GONE);
  72. }
  73. vHolder.buttonStake.setOnClickListener(new ParentButtonLisener());
  74. //记住是那个button事件
  75. vHolder.buttonStake.setTag(position);
  76. return convertView;
  77. }
  78. class ViewHolder{
  79. TextView textViewTitle;
  80. TextView textViewContent;
  81. ListView listViewItem;
  82. Button buttonStake;
  83. }
  84. //父listview的button的监听
  85. private class ParentButtonLisener implements OnClickListener{
  86. @Override
  87. public void onClick(View v) {
  88. Integer nPosition = (Integer) (v.getTag());
  89. Toast.makeText(mContext, "提示" + String.valueOf(nPosition.intValue()), Toast.LENGTH_SHORT).show();
  90. }
  91. }
  92. }

5、里面那层listview的适配器ChildAdapt

  1. package com.nest.adapt;
  2. import java.util.List;
  3. import android.content.Context;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import android.widget.TextView;
  7. import com.nest.activity.R;
  8. import com.nest.base.BaseObjectListAdapter;
  9. import com.nest.entity.Entity;
  10. import com.nest.entity.ShowEntity;
  11. /**
  12. * 子listview适配器
  13. * @author mmsx
  14. *
  15. */
  16. public class ChildAdapt extends BaseObjectListAdapter{
  17. public ChildAdapt(Context context, List<? extends Entity> datas) {
  18. super(context, datas);
  19. }
  20. @Override
  21. public View getView(int position, View convertView, ViewGroup parent) {
  22. ViewHolder vHolder = null;
  23. if (convertView == null) {
  24. vHolder = new ViewHolder();
  25. convertView = mInflater.inflate(R.layout.activity_main_list_item_1, null);
  26. vHolder.textViewTitle = (TextView)convertView.findViewById(R.id.textView_1);
  27. vHolder.textViewContent= (TextView)convertView.findViewById(R.id.textView_2);
  28. convertView.setTag(vHolder);
  29. }else {
  30. vHolder = (ViewHolder) convertView.getTag();
  31. }
  32. ShowEntity tempEntity = (ShowEntity) mDatas.get(position);
  33. vHolder.textViewTitle.setText(tempEntity.getTitle());
  34. vHolder.textViewContent.setText(tempEntity.getContent());
  35. return convertView;
  36. }
  37. class ViewHolder{
  38. TextView textViewTitle;
  39. TextView textViewContent;
  40. }
  41. }

6、实现调用MainActivity

  1. package com.nest.activity;
  2. import java.util.ArrayList;
  3. import com.nest.adapt.ParentAdapt;
  4. import com.nest.entity.ShowEntity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.AdapterView;
  8. import android.widget.AdapterView.OnItemClickListener;
  9. import android.widget.ListView;
  10. import android.app.Activity;
  11. /**
  12. * listview嵌套listview实现效果
  13. * @author mmsx
  14. *
  15. */
  16. public class MainActivity extends Activity {
  17. private ParentAdapt mParentAdapt;
  18. private ArrayList<ShowEntity> mParentList;
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. initData();
  24. initView();
  25. }
  26. private void initData() {
  27. mParentList = new ArrayList<ShowEntity>();
  28. mParentList.clear();
  29. for (int i = 0; i < 20; i++) {
  30. ShowEntity tempEntity = new ShowEntity("标题" + String.valueOf(i), "内容");
  31. mParentList.add(tempEntity);
  32. }
  33. }
  34. private void initView() {
  35. ListView listView = (ListView)findViewById(R.id.listView1);
  36. mParentAdapt = new ParentAdapt(this, mParentList);
  37. listView.setAdapter(mParentAdapt);
  38. listView.setOnItemClickListener(new AdaptItemClick());
  39. //长按listview就不写示范了
  40. //      listView.setOnItemLongClickListener(listener);
  41. }
  42. //父listview的单击事件的监听
  43. private class AdaptItemClick implements OnItemClickListener{
  44. @Override
  45. public void onItemClick(AdapterView<?> parent, View view, int position,
  46. long id) {
  47. if (ParentAdapt.mParentItem == position && ParentAdapt.mbShowChild) {
  48. ParentAdapt.mbShowChild = false;
  49. }else {
  50. ParentAdapt.mbShowChild = true;
  51. }
  52. ParentAdapt.mParentItem = position;
  53. mParentAdapt.notifyDataSetChanged();
  54. }
  55. }
  56. }
 
0

0
 
  相关文章推荐
 
 
查看评论
  暂无评论

 
 
您还没有登录,请[登录][注册]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
 
 
 
 
 

(转载) listview实现微信朋友圈嵌套的更多相关文章

  1. Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。

    转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...

  2. iOS版微信朋友圈数据库的简要分析

    本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4550523.html 之前写了一些关于微信聊天记录的博文之后,不少 ...

  3. 仿QQ空间和微信朋友圈,高解耦高复用高灵活

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...

  4. 分享:android图片浏览器—类微信朋友圈相片浏览【android代码下载】

    今天给大家分享个android图片/相册浏览器,类似微信朋友圈相片浏览,可以左右滑动,可以双击放大,捏拉放大 效果如下:<ignore_js_op> device-2013-09-04-1 ...

  5. python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

    昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 看不下去了,我支持996,年轻人就该996! 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第一 ...

  6. Android NineGridLayout — 仿微信朋友圈和QQ空间的九宫格图片展示自定义控件

    NineGridLayout 一个仿微信朋友圈和QQ空间的九宫格图片展示自定义控件. GitHub:https://github.com/HMY314/NineGridLayout 一.介绍 1.当只 ...

  7. android 滚动栏下拉反弹的效果(相似微信朋友圈)

    微信朋友圈上面的图片封面,QQ空间说说上面的图片封面都有下拉反弹的效果,这些都是使用滚动栏实现的.下拉,当松开时候.反弹至原来的位置.下拉时候能看到背景图片.那么这里简介一下这样的效果的实现. 本文源 ...

  8. iOS燃烧动画、3D视图框架、天气动画、立体相册、微信朋友圈小视频等源码

    iOS精选源码 iOS天气动画,包括太阳,云,雨,雷暴,雪动画. 较为美观的多级展开列表 3D立体相册,可以旋转的立方体 一个仪表盘Demo YGDashboardView 一个基于UIScrollV ...

  9. 域名在微信朋友圈内分享需要ICP备案 杜绝不良信息传播

    就在刚刚,腾讯微信团队发布公告表示域名在朋友圈内分享需要ICP备案,杜绝打击不良互联网信息的传播.公告称根据互联网管理相关规定,即日起在微信朋友圈内分享的域名,请在2014年12月31日前完成ICP备 ...

随机推荐

  1. 服务器控件使用eval()绑定属性出现服务器标记的格式不正确

    在使用asp.net服务器端控件的时候,想要动态绑定控件某属性的值,或者动态绑定控件事件方法的参数,例如一个<asp:RadioButton ID="RadioButton5" ...

  2. Memory management in RxSwift – DisposeBag

    I’ve noticed a lot of beginners in RxSwift ask about DisposeBag. DisposeBag isn’t a standard thing i ...

  3. hibernate增删改查总结

    hibernate操作的都是基于对象的(曾save删delete改update) 进行hql查询是设置参数从零开始(session.setParameter(0,#)) hql查询设置参数可以是其他( ...

  4. 洛谷P3960 列队 Splay

    其实思路并不算太难,就是代码量相对较大. 我们将一次离队转换为一次删除和两次加入,这样就可以保证空间是动态分配的,最大也不会暴空间. 说实话写之前感觉会很恶心,但是代码量就还好吧,有些细节需要特殊注意 ...

  5. 网站出现502 bad getway

    最近项目之余,领导叫解决下系统网站经常出现502的问题,作为小头头的我,怎能不顶上. 流程开始走起,先查nginx,嗯,配置是大众的.是不是缓存溢出了呢.调节buffer的值 .貌似也没什么影响啊.5 ...

  6. 批量修改Linux系统密码

    截取主机IP地址最后一位数.匹配一组定义好的自定义密码.使用chpasswd修改主机账户密码 截图主机IP [root@web01 ~]# ip addr 1: lo: <LOOPBACK,UP ...

  7. USB OTG学习笔记

    仅仅看了半天SPEC写的笔记,有些乱,等调试完毕再次整理,思路不是很成熟,推测成分较多,可能有不对的地方,欢迎拍砖交流指正.   1. 概要     OTG设备使用插头中的ID引脚来区分A/B Dev ...

  8. J2EE提高之知识清单

    Oracle数据库 JDBC事务 Spring事务 SOA XML/JSON redis/memcached 反射,类加载,JVM 工具类:UML, Maven, 性能类:CPU监控,memary监控 ...

  9. jQuery练习总结(二)

    --------------------------------------- <!DOCTYPE html> <!DOCTYPE HTML PUBLIC "-//W3C/ ...

  10. V$PROCESS和V$SESSION,以及使用这两个视图能做什么

    V$PROCESS和V$SESSION,以及使用这两个视图能做什么 http://blog.csdn.net/pan_tian/article/details/7731843 http://blog. ...