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

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

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

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

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

1、项目结构图

7aae930d8b9f32b09bf5cf728a2d6338.png

2、实现效果图

6b9da34203da62ff4ee4bb8ffb6b6221.gif

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

捷达vs7测试_捷达VS5话题:防撞钢梁,溃缩梁。第200311期

//封面图&#xff0c;捷达VS5&#xff0c;自中&#xff0c;最近看到网上有些观点有点儿带偏&#xff0c;然后咱们技术群今天也讨论了一下&#xff0c;大家也来听听咱们爱折腾的车主们是怎么看防撞梁的事情的。事情起因是因为大家看到一些网上的拆车视频&#xff0c;说捷达VS5前…

html5 原生拖拽,原生JS实现拖拽效果

这篇文章主要为大家详细介绍了原生JS实现拖拽效果&#xff0c;文中示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下本文实例为大家分享了JS实现拖拽效果的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下想要让整个元…

ov5640帧率配置_逃离塔科夫怎么提升帧率 帧率优化建议_单机游戏_游戏攻略

逃离塔科夫有着非常真实的游玩与画面表现&#xff0c;所以这类的多人游戏比较吃配置&#xff0c;那么帧率上不去会十分影响游戏体验&#xff0c;下面请看由“SIIYAM”带来的逃离塔科夫帧率优化建议&#xff0c;一起来看看吧。帧率优化建议&#xff1a;这游戏对于cpu资源分配和内…

js 带笔锋 签字版_年轻人的第一支签字笔? ——米家签字笔评测

emm感觉笔者能咕到自己都怀疑人生惹QAQ…对于小米而言&#xff0c;可能他家中性笔做的还真没手机那么好。但对于劝退这件事&#xff0c;理由其实是很复杂的。但既然决定了要来写这样一点东西&#xff0c;那我也自然要把我知道的和能想到的&#xff0c;略述一二。我们先来看看小…

html滚动效果代码,javascript 实现滚动效果代码整理

1.先写两个最常用最简洁的滚动代码代码如下&#xff1a;水平滚动&#xff1a;水平滚动字幕内容垂直滚动&#xff1a;垂直滚动字内容2.平稳不间断滚动var tmnullfunction newsScroll() {var scrollimgdocument.getElementById("scroll")if(scrollimg.parentNode.scrol…

itools 不支持缩略图下载_PS插件缩略图3.8.0.96安装教程

插件下载[名称]&#xff1a;PS插件『缩略图补丁3.8.0.96』[大小]&#xff1a;1.4 MB [语言]&#xff1a;简体中文 [安装环境]&#xff1a;Win7/Win8/Win10[支持版本]&#xff1a;PS CS6—CC2019[32/64位下载链接]&#xff1a;https://pan.baidu.com/s/1AlOlWzMZfYgdJSlZpbQsmw…

z370支持pcie信号拆分吗_定了!AMD B550主板确认将支持PCIE4.0,多项能力接近X570

近日&#xff0c;华擎B550AM Gaming主板照片和文档泄露&#xff0c;Micro-ATX板型、具备4内存插槽&#xff0c;支持PCIE4.0显卡/固态硬盘。B550芯片组本身无法拆分PCIE4.0信道&#xff0c;所以华擎的这张B550主板在搭配第三代锐龙时只有第一条PCIE插槽(通常安装独立显卡)和M.2固…

mac 修改conda镜像 condarc_win10 修改anaconda源

通过 conda config 命令生成配置文件&#xff0c;这里&#xff0c;我们使用清华的镜像&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/&#xff0c;首先&#xff0c;打开CMD&#xff0c;执行命令&#xff1a;conda config --add channels https://mirro…

倒计时css和js html代码,手把手教你利用CSS和JS创建一个倒数计时器

倒计时功能&#xff0c;在很多地方都会用到&#xff0c;我们平时都习惯去用一些插件来应用&#xff0c;会减少不少的工作量&#xff0c;并且效果也能达到预期。我今天并不是想分享什么倒计时插件&#xff0c;而是自己写一个简单的倒数计时器&#xff0c;有兴趣的同学可以往下看…

空间说说html,空间说说大全(共100句)

1、把眼泪留给最疼你的人&#xff0c;把微笑留给伤你最深的人。2、只要再坚持一下下&#xff0c;我们就能到幸福的彼岸。3、伤害过我的人&#xff0c;我从不让他们好过。4、其实生活很平淡&#xff0c;只是我们自己把它弄得苦不堪言。5、忘记&#xff0c;那么冰凉&#xff0c;绝…

七牛云 转码_七牛云存储 - 七牛 php sdk 上传 转码 问题

实在是不会用 sdk 呀 都蒙圈了求大神 指点vendor(Qiniu.io);vendor(Qiniu.rs);$bucket icunzai-voice;$key $filename;$client new \Qiniu_MacHttpClient(null);$putPolicy new \Qiniu_RS_PutPolicy("$bucket:$key");$putPolicy->CallbackUrl U(/Wechat/Bott…

手机端使用ghelper_Anki手机端使用指南(一)

【本篇会对如何使用手机端anki进行详解】有小伙伴询问在应用商店搜索anki找不到名字叫“anki”的软件&#xff0c;这里解释一下&#xff0c;在手机端的名字和电脑端的名字不太一样。安卓对应的名字叫做AnkiDroidIOS对应的名字叫做Ankimobile不过其实是一个软件&#xff0c;同步…

计算机专业英语词汇mp3,【听单词】计算机专业英语词汇音频106,计算机英语单词MP3...

monitor call instruction n.监督命令描述operator unit console 操作负单元控制台emergency switch 应急开关discontinuous spectrum 不连续频谱critical path scheduling method n.关键路径调度法track centertocenter spacing n.磁道中心矩(磁道中心距)digital computing n.…

python生物数据分析_Python学生物统计-数据可视化-学习笔记5

5.1 作图的重要性在分析一个数据之前, 我们首先要对数据进行检查, 在统计上看一下汇总统计, 比如最大值, 最小值, 中位数, 平均值, 方差, 标准差, 变异系数等等.直方图, 看一下数据的分布情况箱线图, 看一下数据的分布, 有无异常值所谓一图胜千言.python中的作图工具5.2 散点图…

三甲医院his系统源码_三甲医院科研管理系统是什么,科研成果包括哪些

对于三甲医院来说&#xff0c;做科研管理系统必不可少的是数据收集&#xff0c;有一个方便的数据收集管理软件能记科研效率提高很多&#xff0c;那就是三甲医院科研管理系统&#xff0c;首先&#xff0c;我们先了解一下三甲医院科研管理系统是什么&#xff0c;科研成果包括哪些…

html的表格使用函数,从另一个HTML表格创建HTML表格的jQuery函数

我在页面上有一个HTML表格&#xff0c;我想用jQuery从中获取信息&#xff0c;清理/清理它&#xff0c;并创建一个新的“干净的”HTML表格信息。从另一个HTML表格创建HTML表格的jQuery函数我有表具有以下结构&#xff1a;Full Name123.456.7890456.789.0123OfficeTitleSuperviso…

小说中场景的功能_场景在小说中的作用

文 | 彼岸晓吾/ Part 01写场景最厉害的作家有余华&#xff0c;莫言和村上。初学写作者最容易犯的毛病是不会写场景&#xff0c;不了解场景的意义所在。很多写手以为&#xff0c;只要把自己的意思表达出来&#xff0c;自然会形成一篇文章或一个故事。其实不然。那么&#xff0c;…

python 批量读取xlsx并合并_如何用Python快速导入多个excel文件并合并文件数据

日常工作中&#xff0c;每个月都会遇到那么个固定的工作&#xff0c;将业务方同事整理的数据导入GP数据库中的某张表中&#xff1b;听起来是很简单的活呢&#xff01; 但每次业务MM总会发来一个文件夹&#xff0c;里面有三四十个Excel文件&#xff08;.xlsx格式&#xff0c;且字…

ie8 html 编辑器 为word,ie8生成word

1. 兼容IE8 导出Wrod方法直接var wordnew ActiveXObject("word.Application");word.visibletrue&#xff1b;(这句不要就不显示word出来&#xff0c;后台处理)var docword.ActiveDcouemnt;doc.content.text"导出内容"doc.save(如果要选择存放路径)就用doc.…

git 创建邮箱 用户名_厉害了!IDEA中如何使用Git进行项目管理,完整教程来了?...

第一部分:安装1. 下载地址: https://git-scm.com/download/win如果速度慢, 使用 迅雷下载;2. 点击安装, 然后下一步, 直到下面这个页面:建议: 按照上面所示方式选中复选框 ;3. 点击下一步, 直到出现这个页面:建议: 这个页面是选择git使用的命令行, 建议使用第一个git自带的;4. …