android 嵌套的listview示例(可参考实现朋友圈评论) 最近在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题。其实,主要解决里面那一层的listview的高度计算就可以,外面那一层listview自动计算。加上里面那层展开的,就是高度。这种解

android 嵌套的listview示例(可参考实现朋友圈评论)

最近在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题。其实,主要解决里面那一层的listview的高度计算就可以,外面那一层listview自动计算。加上里面那层展开的,就是高度。这种解决方案经常应用于朋友圈的评论。每一条说说,然后下面有评论。

项目下载地址:http://download.csdn.net/detail/qq_16064871/9334993

1、项目结构图

2、实现效果图

这上面效果图的监听两层都有,以及外面的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 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();

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 mParentList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initData();

initView();

}

private void initData() {

mParentList = new ArrayList();

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();

}

}

}

布局就不贴,有好几个。有需要下载项目源码。

项目下载地址:http://download.csdn.net/detail/qq_16064871/93349931楼douyingnan5小时前有个东西叫做expandablelistview

android评论嵌套,android 嵌套的listview示例(可参照实现朋友圈评论)相关推荐

  1. android 仿微信朋友圈 评论,2020年android 仿微信朋友圈 评论

    2020年android 仿微信朋友圈 评论 1.如果有人问我:那些艰难的岁月你是怎么熬过来的?我想我只有一句话回答:我有一种强大的精神力量支撑着我,这种力量名字叫"想死又不敢" ...

  2. android朋友圈评论功能兼容沉浸式状态栏,九宫格图片显示

    android朋友圈评论功能,沉浸式状态栏,九宫格图片显示器,上拉加载下拉刷新功能,可直接用到项目中 背景 在前两个项目开发过程中用到了朋友圈这个功能,包含了评论回复.九宫格图片及大图展示展示,上拉加 ...

  3. android 评论发表情,安卓手机怎么在微信朋友圈评论发表情包?

    核心提示:目前,微信的最新版本更新了朋友圈评论表情包的功能,也就是说用户可以朋友圈开启"斗图模式"啦!但是有些安卓系统的小伙伴发现,自己更新了微信后似乎也不能在朋友圈发评论,具体是 ...

  4. 微信发朋友圈/评论/点赞/搜索/购物车测试点

    微信发朋友圈 功能测试 1.只发送文本(长按相机图标进入) 2.只发送图片(点击相机图标) 3.只发送视频(点击相机图标) 4.发送文本+图片 输入满足要求的文本,图片进行验证 5.发送文本+视频 输 ...

  5. html仿微信评论输入框,简单仿微信朋友圈评论功能

    [实例简介] 简单实现了微信朋友圈评论的功能,被点击的评论能够随着输入框高度的改变而改变位置! [实例截图] [核心代码] 简单仿微信朋友圈评论 └── TalkInTalk ├── AndroidM ...

  6. 测试用例(微信发朋友圈/评论 /点赞/搜索/购物车)

    一,微信朋友圈 功能 性能 界面 易用 安全 兼容 中断网 功能:能不能设置仅自己可见 ,能不能给用户点赞评论 能不能发布照片添加位置 能不能更改朋友圈背景图片 能不能在朋友圈中点开别人头像 发布作品 ...

  7. TextView实现点击部分文字跳转,实现微信朋友圈评论Item的显示效果

    大家都熟悉微信朋友圈或者是贴吧里的某一条评论, 比如: 小A回复小B:大吉大利,今晚吃鸡,哈哈哈. 点击小A和小B可以跳转到用户页面,点击整个Item就会响应其它事件,比如弹出键盘输入回复. 要实现这 ...

  8. 朋友圈评论发html,微信评论怎么发图片(微信朋友圈评论可以发表情包啦)

    今天你的朋友圈被表情包淹没了没? 啊费一打开朋友圈 几乎全都在"索求"表情包 看到各种沙雕表情包,默默收集了一波哈哈哈 不止朋友圈,就连微博都上了热搜 一波表情包的热潮刷爆了网上 ...

  9. 朋友圈加粗字体数字_微信更新!朋友圈评论能发表情包,结果变成沙雕狂欢

    莫非...在安卓测试版的黑暗模式上线后,iOS 终于跟上了?! ​ 想多啦..机哥马上尝鲜,并没有发现 iOS 微信更新了黑暗模式. ​ 朋友圈评论, 终于支持发表情包啦! 以前,在朋友圈评论,只能发 ...

最新文章

  1. 借鉴AQS的CHL思路解决消息多线程消费顺序ACK问题
  2. matlab 提取数列里非零_什么!科研交流免费教Matlab?
  3. VTK:二次聚类用法实战
  4. linux rsync 目录同步,Linux rsync网站目录同步功能的实现
  5. 2021年中国一次性弹性泵市场趋势报告、技术动态创新及2027年市场预测
  6. php如何只删去汉字,php如何删除字符串中的中文
  7. [译转]深入理解LayoutInflater.inflate()
  8. sympy 求微分方程_Sympy笔记一
  9. WebSphere漏洞总结复现
  10. Pegasus Serial Port Tool @ Simplicity Version 串口测试工具简化版发布
  11. 2021年茶艺师(中级)考试及茶艺师(中级)实操考试视频
  12. 【经典算法实现 3】冒泡排序算法(单向冒泡,双向冒泡)
  13. 软件测试与人工智能结合,人工智能技术与软件测试之间的关系
  14. 将电脑多余空间分给其他盘
  15. 蓝桥杯比赛准备总结(大学编程学习历程)
  16. python 换页符_Python用什么方法可以将换行符分割成多行?
  17. 5分钟弄懂程序员的如何升级到架构师。
  18. Swift:高级架构、流水线深度、内存延迟 转载
  19. 吐血整理!14个编写Spring MVC控制器的实用小技巧
  20. 5000左右的linux笔记本推荐,5000左右,办公笔记本,有什么好的推荐

热门文章

  1. VM虚拟机中 localhost login_UTM 2.0 虚拟机来了,解决上网和无声音问题
  2. Opencv数据符号说明
  3. windows+caffe下对CIFAR训练
  4. 安卓逆向_1 --- 逆向环境配置、APK 文件结构、APK 打包流程
  5. 在 VC++ 中使用 内联汇编
  6. java1.8.0,jdk1.8.0版本
  7. php保存rar,php 解压rar文件
  8. Spring Security用户认证和权限控制(默认实现)
  9. 机器学习笔记(了解)
  10. php mysql倒计时_php 倒计时程序