项目需求,需要做动态展示功能,我的想法是每条动态的评论都是Listview,然后动态也是Listview,效果图是这样的

这个实现的难点主要是评论adapter和动态adapter的设计实现。

评论adapter是子Listview,与写其他adapter过程是一样的

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.example.amei.tt.R;
import com.tt.amei.entity.Comment;import java.util.List;public class CommentAdapter extends BaseAdapter{private LayoutInflater layoutInflater;private List<Comment> commentList;//需要一个Context,通过Context获得Layout.inflater,然后通过inflater加载item的布局public CommentAdapter(Context context, List<Comment> comment) {layoutInflater = LayoutInflater.from(context);commentList = comment;}@Overridepublic int getCount() {return commentList.size();}@Overridepublic Object getItem(int position) {return commentList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null){convertView = layoutInflater.inflate(R.layout.commentitem,parent,false);holder = new ViewHolder();holder.isGoodComment = (ImageView)convertView.findViewById(R.id.isgoodcomment);holder.name = (TextView)convertView.findViewById(R.id.comname);holder.content = (TextView)convertView.findViewById(R.id.comcontent);convertView.setTag(holder);}else {holder = (ViewHolder) convertView.getTag();}Comment comment = commentList.get(position);holder.name.setText(comment.getUserId());holder.content.setText(comment.getText());holder.isGoodComment.setImageResource(comment.getIsgoodcomment());return convertView;}private class ViewHolder {ImageView isGoodComment;TextView name;TextView content;}
}

父adapter是动态的DynamicAdapter

这里有一个子listview显示不全的问题,解决办法是重新计算listview高度(借鉴别人的方法)


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;import com.example.amei.tt.R;
import com.tt.amei.entity.Comment;
import com.tt.amei.entity.Dynamic;import java.util.List;public class DynamicAdapter extends BaseAdapter{private LayoutInflater layoutInflater;private List<Dynamic> dynamicList;private Context context;private CommentAdapter commentAdapter;private List<List<Comment>> commentDyList;//所有动态的评论public  DynamicAdapter(Context context, List<Dynamic> dynamics,List<List<Comment>> commentDyList){super();this.context = context;dynamicList = dynamics;layoutInflater = LayoutInflater.from(context);this.commentDyList = commentDyList;}@Overridepublic int getCount() {return dynamicList.size();}@Overridepublic Object getItem(int position) {return dynamicList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null){convertView = layoutInflater.inflate(R.layout.dynamiclayout,parent,false);holder = new ViewHolder();holder.content = (TextView)convertView.findViewById(R.id.showInfo);holder.dynamicUserName = (TextView)convertView.findViewById(R.id.userName);holder.dyTime = (TextView)convertView.findViewById(R.id.tvAge);holder.dyUserHeadima = (ImageView)convertView.findViewById(R.id.iv_leftlogo);holder.likenum = (TextView)convertView.findViewById(R.id.dianzan_nums);holder.dislikenum = (TextView)convertView.findViewById(R.id.tramplenum);holder.giftnum = (TextView)convertView.findViewById(R.id.giftnums);holder.commentnum = (TextView)convertView.findViewById(R.id.pinglun_nums);holder.sharenum = (TextView)convertView.findViewById(R.id.fenxiang_nums);holder.comment = (ListView)convertView.findViewById(R.id.comment);convertView.setTag(holder);}else {holder = (ViewHolder) convertView.getTag();}
//常规写法
        Dynamic dynamic = dynamicList.get(position);holder.content.setText(dynamic.getText());holder.dynamicUserName.setText(dynamic.getDynamicUserName());holder.dyTime.setText(dynamic.getDyTime());holder.dyUserHeadima.setImageResource(dynamic.getDyUserHeadima());holder.likenum.setText(String.valueOf(dynamic.getFivenums(0)));holder.dislikenum.setText(String.valueOf(dynamic.getFivenums(1)));       holder.giftnum.setText(String.valueOf(dynamic.getFivenums(2)));      holder.commentnum.setText(String.valueOf(dynamic.getFivenums(3)));holder.sharenum.setText(String.valueOf(dynamic.getFivenums(4)));
        /*** 每条动态的评论适配* commentDyList是所有动态的评论,类型为List<List<Comment>>* */commentAdapter = new CommentAdapter(context,commentDyList.get(position));holder.comment.setAdapter(commentAdapter);//重新计算listview 的高度setListViewHeight(holder.comment);return convertView;}private class ViewHolder {TextView content;//内容TextView dynamicUserName;//昵称ImageView dyUserHeadima;//头像TextView dyTime;//距离发动态时间TextView likenum;TextView dislikenum;TextView giftnum;TextView commentnum;TextView sharenum;ListView comment;//动态的评论}/***重新计算listview 的高度* 解决嵌套的Listview显示不全的问题* */public void setListViewHeight(ListView listView) {ListAdapter listAdapter = listView.getAdapter();if (listAdapter == null) {return;}int totalHeight = 0;for (int i = 0; i < listAdapter.getCount(); i++) {View listItem = listAdapter.getView(i, null, listView);listItem.measure(0, 0);totalHeight += listItem.getMeasuredHeight();}ViewGroup.LayoutParams params = listView.getLayoutParams();params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));listView.setLayoutParams(params);}}

Activity中要写的是


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;import com.example.amei.tt.R;
import com.tt.amei.adapter.DynamicAdapter;
import com.tt.amei.entity.Comment;
import com.tt.amei.entity.Dynamic;import java.util.ArrayList;
import java.util.List;public class DynamicActivity extends AppCompatActivity{private DynamicAdapter dynamicAdapter;private ListView listDynamic;/*** 评论内容* 评论数据初始化* */private List<Dynamic> dynamicList;private List<Comment> commentList;private List<List<Comment>> dynamicCommentList;public void initCommentData(){dynamicCommentList = new ArrayList<>();commentList = new ArrayList<Comment>();Comment comment = new Comment("汪洋",":一切都在改变,唯独你的样子在我心中没变",R.mipmap.goodcomment);commentList.add(comment);comment = new Comment("周用",":特别好!",0);commentList.add(comment);comment = new Comment("丫丫",":我喜欢你的图片!",0);commentList.add(comment);comment = new Comment("海天相接",":同意楼上!",0);commentList.add(comment);dynamicCommentList.add(commentList);commentList = new ArrayList<Comment>();comment = new Comment("漱芳华",":一切都在改变1",R.mipmap.goodcomment);commentList.add(comment);comment = new Comment("周用",":特别好666!",0);commentList.add(comment);comment = new Comment("丫丫",":我喜欢你的图片!",0);commentList.add(comment);dynamicCommentList.add(commentList);commentList = new ArrayList<Comment>();dynamicCommentList.add(commentList);commentList = new ArrayList<Comment>();dynamicCommentList.add(commentList);commentList = new ArrayList<Comment>();dynamicCommentList.add(commentList);commentList = new ArrayList<Comment>();dynamicCommentList.add(commentList);commentList = new ArrayList<Comment>();comment = new Comment("丫丫",":我喜欢你的图片!",R.mipmap.goodcomment);commentList.add(comment);comment = new Comment("海天相接",":同意楼上!",0);commentList.add(comment);dynamicCommentList.add(commentList);}/*** 动态数据初始化*/public void initDynamic(){dynamicList = new ArrayList<Dynamic>();int[] fivenums1 = {20,1,2,1,3};int[] fivenums2 = {0,1,2,0,1};int[] fivenums3 = {20,1,2,1,5};int[] fivenums4 = {10,1,0,1,2};int[] fivenums5 = {2,1,2,1,0};int[] fivenums6 = {6,0,2,1,3};int[] fivenums7 = {9,1,0,1,0};Dynamic dynamic = new Dynamic("111111111111l","无法无天","2分钟前",R.drawable.blurima,dynamicCommentList.get(0),fivenums1);dynamicList.add(dynamic);dynamic = new Dynamic("la2222222222222222l11111","破小流苏","20分钟前",R.drawable.blurima2,dynamicCommentList.get(1),fivenums2);dynamicList.add(dynamic);dynamic = new Dynamic("lal33333333l22222","急疯的兔子会咬人","1小时前",R.drawable.blurima3,dynamicCommentList.get(2),fivenums3);dynamicList.add(dynamic);dynamic = new Dynamic("lalalalallalal33333","阿拉蕾","2小时前",R.drawable.blurima4,dynamicCommentList.get(3),fivenums4);dynamicList.add(dynamic);dynamic = new Dynamic("lalalalallalal44444","无法无天","1天前",R.drawable.blurima2,dynamicCommentList.get(4),fivenums5);dynamicList.add(dynamic);dynamic = new Dynamic("lalalalallalal55555","无法无天","1天前",R.drawable.blurima3,dynamicCommentList.get(5),fivenums6);dynamicList.add(dynamic);dynamic = new Dynamic("la6666666666666","无法无天","10-15",R.drawable.blurima4,dynamicCommentList.get(6),fivenums7);dynamicList.add(dynamic);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.dynamiclist);findview();initCommentData();initDynamic();init();}public void findview(){listDynamic = (ListView)findViewById(R.id.dynamiclist);}public void init(){dynamicAdapter = new DynamicAdapter(this,dynamicList,dynamicCommentList);listDynamic.setAdapter(dynamicAdapter);}
}
initCommentData();
initDynamic();

这两个为评论数据和动态数据的初始化。

Comment类和Dynamic类不详细说明,我觉得关键就是父Adapter的内容。

Android之ListView嵌套,访空间动态展示页面相关推荐

  1. android仿qq动态视频播放,Android 自定义ListView实现QQ空间界面(说说内包含图片、视频、点赞、评论、转发功能)...

    前端时间刚好需要做一个类似于QQ空间的社区分享功能,说说内容包含文字(话题.内容).视频.图片,还需包含点赞,评论,位置信息等功能. 就采用LIstview做了一个,先来看下效果,GIF太大,CSDN ...

  2. Android使用recyclerview实现头条新闻动态展示

    今天要做的就是使用RecyclerView获取后台数据并展示为头条新闻的样式.直接上图: 后台的数据格式: 1.xml中添加控件 <?xml version="1.0" en ...

  3. android listView嵌套gridview的使用心得

    在开发的过程中可能需要用到listview嵌套gridview的场景,但是在Android中, 不能在一个拥有Scrollbar的组件中嵌入另一个拥有Scrollbar的组件,因为这不科学,会混淆滑动 ...

  4. Android ListView嵌套ListView的实现方式

    首先刚到北京一个月,产品经理让做一个类似于商城的东东,起初感觉没什么难度,(不就一个电子商务app嘛,以前也做过啊),但是当看到有需求是这样的 然后就开始做,起初太懒了,就在网上找,找到了一个List ...

  5. android listview左右滑动动画效果,Android基于ListView实现类似QQ空间的滚动翻页与滚动加载效果...

    本文实例讲述了Android基于ListView实现类似QQ空间的滚动翻页与滚动加载效果.分享给大家供大家参考,具体如下: 1. 滚动加载 listView.setOnScrollListener(n ...

  6. Android中RecyclerView嵌套RecyclerView或嵌套ListView

    Android中RecyclerView嵌套RecyclerView或嵌套ListView

  7. android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。

    我们直接入主题.所有问题例子请参照下图 1,怎样使图片具有点击事件? 答: 解决方法: 在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick. g ...

  8. android ApiDemos学习1 主界面动态ListView显示

    0 Android提供了一个供开发者学习使用的示例程序.其界面如下.图中可以看到,应用列表应为ListView,看其源码发现,并非为简单的ListView,而是采用动态加载的方式. 1 主界面代码如下 ...

  9. android xml 列表展示,Android中ListView实现展示列表数据

    1.在activity_main.xml中添加一个ListView xmlns:tools="http://schemas.android.com/tools" android:l ...

最新文章

  1. 深入了解 TabNet :架构详解和分类代码实现
  2. SAP PM 初级系列25 - 维修工单与采购单据之间LINK?
  3. 实现Runnable接口的形式创建线程
  4. rails4 mysql2_ruby-on-rails – Rails 4 – Gem :: LoadError:为数据库适配器指定了“mysql2”,但gem未加载...
  5. 前端jQuery基本语法
  6. Linux 内核定时器实验————复习到这
  7. 在 idea 中为类和方法自动生成注释
  8. jquery--选择器sizzle源码分析
  9. 理工科同学转行经管咨询金融,一定要慎重
  10. 记一次ST-LINK维修及刷固件过程
  11. weblogic 调优参数
  12. Linux之SDL2+OpenGL+EGL绘制(十六)
  13. presto查询报错
  14. java断点上传分片保存方案_分片上传与断点续传解决方案
  15. 初用vscode遇到中文乱码问题
  16. 机器学习——联合概率分布及其意义
  17. 丢掉上半年全球新能源汽车销冠的特斯拉,烦恼不止比亚迪
  18. 反垃圾邮件系统管理手册
  19. 51单片机之模拟IIC总线
  20. Web前端设计与开发课程设计:简易淘宝网页设计

热门文章

  1. 压缩感知测量矩阵构造方法研究
  2. 建水实验中学2021高考考成绩查询,高三第一次省统测成绩发布 建水实验中学低进高出、强势崛起...
  3. 推荐一款手机Python编程软件
  4. 11.30黄金伦敦金还会跌吗?黄金原油独家交易指导及策略解套
  5. python sdklive2d_Unity使用Live2DSDK制作游戏(Demo制作1)
  6. Jquery中的ajax请求($.ajax())参数请求详解
  7. 谓词推进 PUSHED PREDICATE
  8. 企业闪存应用八年回顾
  9. 江苏大学计算机考研上岸分享
  10. 【opencv-python角度测量】