昨天在做项目时,请求服务器的好友动态后,将好友动态和评论显示到界面上,用ListView显示,发现一进这个界面时,listView的适配器的getVIew()方法就会执行6次,后来发现原来是ListView的宽高写的有问题,开始写的是宽为match_parent,高为包裹内容,这样就出现了问题,之后把ListView的宽高都改为了match_parent,getView()方法就正常执行了,界面布局改为了这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:background="@color/base_background_color"> <ListView
android:id="@+id/lv_fragment_friends"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:divider="@android:color/transparent"
android:dividerHeight="10dp"
android:paddingBottom="10dp"
android:scrollbarStyle="outsideOverlay"> </ListView> </LinearLayout>

然后我要把分享信息的评论动态用代码添加到ListView的每个item里面,item布局如下:

部分代码:

//messageFragment的二级fragment
public class Message_Friends_Fragment extends Fragment {
/**
* 自定义的观察者
*/
public MyObserver mObserver;
/**
* 从服务器获取的所有的好友分享的动态的集合
*/
private List<Resquest_friends_info.EveryShareInfo> mResults_list; /**
* ListVIew当前的条目
*/
public static int CURRENT_ITEM = 0;
@Bind(R.id.lv_fragment_friends)
ListView mListView; @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_message_firends, null);//ViewGroup ?
ButterKnife.bind(this, view); mObserver = new MyObserver();//创建一个观察者对象
//创建一个访问网络的Control
Message_Friends_NetControl control = new Message_Friends_NetControl(this);
control.getFriendsShareFromServer();//访问网络并且解析Json mListView.setDivider(null); return view; } class FrendsAdapter extends BaseAdapter { @Override
public int getCount() {
return mResults_list.size();
} @Override
public Object getItem(int i) {
return mResults_list.get(i);
} @Override
public long getItemId(int i) {
return i;
} @Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
Log.d("msg", "getView()");
ViewHolder holder;
if (convertView != null) {
holder = (ViewHolder) convertView.getTag();
} else {
convertView = View.inflate(UIUtils.getContext(), R.layout.lv_item_message_friends, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
//获取某条分享的动态
Resquest_friends_info.EveryShareInfo info = mResults_list.get(i);
// Log.d("msg","现在是第几个动态?"+"--->"+i);
//获取当前分享动态的所有回复的集合
ArrayList<Resquest_friends_info.EveryShareInfo.Reply> replys = info.getPub_com();
// Log.d("msg","评论总数--->"+replys.size());
for (Resquest_friends_info.EveryShareInfo.Reply reply : replys) {
Log.d("msg",reply.getPc_txt()+"--->"+reply.getPc_name());//评论的内容以及顺序全是正确的
}
Log.d("msg", "第几个条目?++------------------------------------------------" + i);
//动态添加评论之前先移除评论线性布局里的所有评论,因为这个线性布局可能是复用的之前item的,所以要先移除线性布局里原来的评论
holder.ll_comment_message_friends.removeAllViews();
for(int j=0;j<replys.size();j++){
TextView textView = new TextView(UIUtils.getContext());//new 一条评论
textView.setText(replys.get(j).getPc_name()+": "+replys.get(j).getPc_txt());//设置评论人的名字和评论的内容
textView.setTextColor(Color.BLACK);
holder.ll_comment_message_friends.addView(textView);
} holder.tvUserName.setText(info.getPub_frd_name());//设置好友动态分享者的名字
Log.d("msg","tvUserName是否同一对象?---->"+holder.tvUserName.toString());
holder.tvTime.setText(info.getPub_datetime());//设置分享这条动态的时间
holder.tvSaySth.setText(info.getPub_context());//设置分享动态的内容
//显示用户头像
ImageLoader.getInstance().displayImage(GlobalConstant.SERVER_URL + "/" + info.getPub_frd_head(), holder.ivUserFace); return convertView;
}
}
//holder里面的对象,每个item都是这个对象,只不过内容不同
static class ViewHolder {
@Bind(R.id.iv_friends_face)
ImageView ivUserFace;//用户头像
@Bind(R.id.tv_user_name)
TextView tvUserName;//用户名字
@Bind(R.id.tvTime_friends)
TextView tvTime;//时间
@Bind(R.id.tvSaySth)
TextView tvSaySth;//说点什么
@Bind(R.id.iv_friends_friends_pic)
ImageView iv_friends_friends_pic;//发的具体图片
/**
* 用来放评论的线性布局
*/
@Bind(R.id.ll_comment_message_friends)
LinearLayout ll_comment_message_friends; public ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}

ListView使用的时候遇到的一些问题的更多相关文章

  1. 张高兴的 UWP 开发笔记:横向 ListView

    ListView 默认的排列方向是纵向 ( Orientation="Vertical" ) ,但如果我们需要横向显示的 ListView 怎么办? Blend for Visua ...

  2. Android—万能ListView适配器

    ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...

  3. Android—ListView条目背景为图片时,条目间距问题解决

    ListView是android开发中使用最普遍的控件了,可有的listView条目的内容颇为丰富,甚至为了美观,背景用指定图片,如下图:

  4. Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)

    昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...

  5. listview下拉刷新和上拉加载更多的多种实现方案

    listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明. 方案一:添加头布局和脚布局        android系统为listview提供了addfootview ...

  6. Android listview和gridview以及view的区别

    GridView 可以指定显示的条目的列数. listview一般显示的条目的列数都是一列 如果是列表(单列多行形式)的使用ListView,如果是多行多列网状形式的优先使用GridView andr ...

  7. mono for android Listview 里面按钮 view Button click 注册方法 并且传值给其他Activity 主要是context

    需求:为Listview的Item里面的按钮Button添加一个事件,单击按钮时通过事件传值并跳转到新的页面. 环境:mono 效果: 布局代码 主布局 <?xml version=" ...

  8. 【腾讯Bugly干货分享】跨平台 ListView 性能优化

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/FbiSLPxFdGqJ00WgpJ94yw 导语 精 ...

  9. android内部培训视频_第三节(3)_常用控件(ViewPager、日期时间相关、ListView)

    第三节(2):常用控件之ViewPager.日期时间相关.ListView  一.ViewPager 实例:结合PagerAdapter滑动切换图片  二.日期时间相关:AnalogClock\Dig ...

  10. 父ListView嵌套子ListView时点击事件没有响应

    转发请备注出处:http://www.cnblogs.com/LT5505/p/5972999.html 问题: 在ListView中嵌套ListView之后,子ListView会把父ListView ...

随机推荐

  1. Hash算法冲突解决方法分析

    采用开放定址法处理散列表的冲突时,其平均查找长度?  高于链接法处理冲突 低于二分查找 开放定址法:一旦发生冲突,就去寻找下一个空的散列地址,只要散列地址够大,空的地址总会找到 链地址法: 一旦发生冲 ...

  2. CSS传统布局之布局模型

    刚开始准备这篇文章的时候,查到的有很多包含“布局模型”的中文博客或是资料,但是google上并未找到类似字眼,google到的是“flex layout module”“grid layout mod ...

  3. Ubuntu为已经安装的PHP7单独编译mysqli

    编译安装PHP7后没有在ext中没有生成mysqli.so等文件,现在单独编译安装mysqli php7安装的位置:/usr/local/php7/ 我的扩展目录:/usr/local/php7/li ...

  4. 曾经的ps的图片

  5. 100个精选zencart扩展插件

    100个精选zencart扩展插件 特别推荐 1. 数据库备份 2. 产品横向布局. 3. 邮件订阅Newsletter Subscribe. 4. google 翻译google_translate ...

  6. IBM Mq Spring JMS 的xml配置

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  7. 好用的API文档--在线版

    安卓在线api http://www.android-doc.com/reference/packages.html

  8. Linux 配置VNC远程桌面

    X11 提供的 display manager 为 xdm ,而著名的 KDE 与 GNOME 也都有自己的 display manager 管理程序,分别是 kdm 与 gdm .你可以透过三者中任 ...

  9. asp.net控件ControlToValidate同OnClientClick冲突解决办法

    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" Error ...

  10. UICollectionView之自定义Layout

    #import <UIKit/UIKit.h> @interface WQViewController : UIViewController - (id)initWithFrame:(CG ...