转载请声明出处(http://www.cnblogs.com/linguanh/)

先上张效果图:

1,思路简述

这个肯定是要重写 baseAdapter的了,这里我分了两个数据适配器,一个是自定义的 listView的item 风格xml,另一个是该风格xml文件里面的嵌套的GridView数据适配。然后我们需要两个数据辅助类,类似上述,一个是专门来保存在GridView中要显示的每张图片的信息,例如它的url、name、id等等,暂称该辅助类为 UserImgs,大家可以随便增删,另一个是总的专门保存listView中的item的数据,我们称它为UserInfo,这里,说明下,因为每条 item 都有一个自己的GridView,也就是说,UserInfo中必须要有一个UserImgs类实例,用来存储图片信息。然后,就是代码实现了。

使用例子放置最后。

2,辅助类的代码

声明,这两个辅助类,是我根据自己项目所定义的,大家可以据己所需,自行修改,思路掌握了,修改很简单、很快!

第一个,UserImgs

 package cn.share.bananacloud.custom_listview_style;

 /**
* Created by Administrator on 2015/9/6.
*/
public class UserImgs { public int id; //图片的id
public String name; //图片的名称
public String urls; //图片的 url public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrls() {
return urls;
}
public void setUrls(String urls) {
this.urls = urls;
}
}

第二个,UserInfo

 package cn.share.bananacloud.custom_listview_style;

 /**
* Created by LinGuanHong--af913337456 on 2015/9/6.
* qq:913337456
* email:913337456@qq.com
*/
import java.util.ArrayList;
import java.util.List;
public class UserInfo {
private String headUrl; // 头像 url
private String usertext; // 帖子内容
private String username; // 用户名称
private String usertime; // 发帖时间
private String usertalknumber; // 评论数目
private List<UserImgs> ui = new ArrayList<UserImgs>(); // 这个就是我说的,UserImgs 实例
//--------------------------------------- headUrl
public String getHeadUrl() {
return headUrl;
} public void setHeadUrle(String headUrl) {
this.headUrl = headUrl;
}
//--------------------------------------- Name
public String getUserName() {
return username;
} public void setUserName(String username) {
this.username = username;
}
//--------------------------------------- Text
public String getUserText() {
return usertext;
} public void setUserText(String usertext) {
this.usertext = usertext;
}
//---------------------------------------- Time
public String getUserTime() {
return usertime;
} public void setUserTime(String usertime) {
this.usertime = usertime;
}
//---------------------------------------- TalkNumber
public String getUserTalkNumber() {
return usertalknumber;
} public void setUserTalkNumber(String usertalknumber) {
this.usertalknumber = usertalknumber;
}
//---------------------------------------- post pics and mp3 or mp4
public List<UserImgs> getUi() {
return ui;
}
public void setUi(List<UserImgs> ui) {
this.ui = ui;
}
}

3,ListView 的数据适配的重写类

声明,这个例子和下面的例子的图片显示都采用了开源框架---imageLoder。这个数据适配器是 GridView的数据适配入口,GridView的数据适配在它里面调用配置,必要的代码注释我已给出,其他的都很容易理解。

 package cn.share.bananacloud.custom_listview_style;

 /**
* Created by Administrator on 2015/9/6.
*/ import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView; import com.lgh.addItemListview.mymodule.app2.SharePreferenceHelper;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import java.util.List; import cn.share.bananacloud.InternetHelper;
import cn.share.bananacloud.R;
import cn.share.bananacloud.commonDataHelper;
import cn.share.bananacloud.imageLoderHelper; public class WeChatAdapter extends BaseAdapter { protected ImageLoader imageLoader = ImageLoader.getInstance();
private List<UserInfo> mList;
private Context mContext;
SharePreferenceHelper sp;
public WeChatAdapter(Context _context) {
this.mContext = _context;
sp = new SharePreferenceHelper(mContext,"loginrecord",null);
} public void setData(List<UserInfo> _list) { //这个函数是数据主入口
this.mList = _list;
} @Override
public int getCount() {
return mList.size();
} @Override
public UserInfo getItem(int position) {
return mList.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.bbs_main_item, parent, false);
holder.gridView = (NoScrollGridView) convertView.findViewById(R.id.gridView);
holder.userHead = (ImageView) convertView.findViewById(R.id.bbs_main_lv_userhead);
holder.username = (TextView) convertView.findViewById(R.id.bbs_main_lv_username);
holder.usertext = (TextView) convertView.findViewById(R.id.bbs_main_lv_item_text);
holder.usertime = (TextView) convertView.findViewById(R.id.bbs_main_lv_usertime);
holder.usertalknumber = (TextView) convertView.findViewById(R.id.bbs_main_lv_item_talknumber);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
UserInfo mUserInfo = getItem(position);
if (mList != null && mList.size() > 0) { // 判断是否有数据
showHeadImage(holder.userHead,mList.get(position).getHeadUrl());
holder.username.setText(mList.get(position).getUserName());
holder.usertext.setText(mList.get(position).getUserText());
holder.usertime.setText(mList.get(position).getUserTime());
holder.usertalknumber.setText(mList.get(position).getUserTalkNumber()); if(mUserInfo.getUi().size()>0) { //这里判断该组数据是否有 gridView 的图片url数据,有才进入 gridView的配置
holder.gridView.setVisibility(View.VISIBLE);
holder.gridView.setAdapter(new MyGridAdapter(mUserInfo.getUi(), mContext));
// 这里我把 GridView的 item 点击监听给去掉了,防止冲突,而且我项目不需要。
/*holder.gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("zzzzz","--onItem--"+position);
// imageBrower(position,bean.urls);
}
});*/
}else{ // 一定要加 else 防止GridView 的数据重复显示,在不同的 item 上面
holder.gridView.setVisibility(View.GONE);
holder.gridView.setAdapter(null);
}
}
//去掉 gridView 的 item 点击
holder.gridView.setClickable(false);
holder.gridView.setPressed(false);
holder.gridView.setEnabled(false);
return convertView;
} public class ViewHolder {
NoScrollGridView gridView;
TextView username,usertext,usertime,usertalknumber;
ImageView userHead;
} public void showHeadImage(ImageView view,String url){
//Log.d("zzzzz",""+useraccount.get((int)data));
if (url!=null) {
if (InternetHelper.checkConnection(mContext)) {
try {
imageLoader.displayImage(
url,
view,
imageLoderHelper.getLoderOption(145, R.drawable.user_default_head, 80),
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) { } @Override
public void onLoadingFailed(String s, View view, FailReason failReason) { } @Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
if(s.contains(InternetHelper.exchangeUserAccount(sp.getOneInfo("useraccount", "-1")))) {
imageLoader.getDiskCache().remove(s);//clear old cache
}
} @Override
public void onLoadingCancelled(String s, View view) { }
}
);
} catch (Exception ignored){}
} else {
// load but doesn't remove local cache
imageLoader.displayImage
(
commonDataHelper.rootUrl+"uploadpic/" + InternetHelper.exchangeUserAccount(url).trim() + "/head.jpg",
view,
imageLoderHelper.getLoderOption(145, R.drawable.user_default_head, 80)
);
}
} else {
Log.d("zzzzz", "useraccount.size() is 0");
}
}
}

4,GridView 数据适配器的重写类

GridView 数据适配类的作用主要是把图片都显示到 GridView上面,再返回此 View,然后显示到 ListView 的 item 上面。

 package cn.share.bananacloud.custom_listview_style;

 /**
* Created by Administrator on 2015/9/6.
*/ 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 com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; import cn.share.bananacloud.R;
import cn.share.bananacloud.imageLoderHelper; public class MyGridAdapter extends BaseAdapter { private List<UserImgs> mUI;
protected ImageLoader imageLoader = ImageLoader.getInstance();
private LayoutInflater mLayoutInflater; public MyGridAdapter(List<UserImgs> ui, Context context) {
mLayoutInflater = LayoutInflater.from(context);
this.mUI = ui;
} @Override
public int getCount() {
return mUI == null ? 0 : mUI.size();
} @Override
public String getItem(int position) {
return mUI.get(position).urls;
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
MyGridViewHolder viewHolder;
if (convertView == null) {
viewHolder = new MyGridViewHolder();
convertView = mLayoutInflater.inflate(R.layout.user_img_item,parent, false);
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_user_img);
convertView.setTag(viewHolder);
} else {
viewHolder = (MyGridViewHolder) convertView.getTag();
}
String url = getItem(position);
imageLoader.displayImage(url, viewHolder.imageView, imageLoderHelper.getLoderOption(180, 0, 0));
return convertView;
}
private static class MyGridViewHolder {
ImageView imageView;
}
}

代码使用例子

ListView mListview  = new ListView();

WeChatAdapter mWeChat = new WeChatAdapter (context);

List<UserInfo> mUserInfo = new ArrayList<>();

mUserInfo .add(你配置好的UserInfo);

mWeChat .setData(mUserInfo);

mListview .setAdapter(mWeChat );

打完收工。

android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。的更多相关文章

  1. Android仿微信朋友圈图片查看器

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/40264551 看博文之前,希望大家先打开自己的微信点到朋友圈中去,细致观察是不是发 ...

  2. android 仿微信朋友圈图片选择控件

    调用方式(布局文件就是一个自定义控件): private ArrayList<String> selectedImages; @BindView(R.id.imagePicker) Ima ...

  3. Android仿微信朋友圈图片浏览器(支持图片手势缩放,拖动)

    ※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fil ...

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

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

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

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

  6. Android 仿微信朋友圈添加图片

    github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...

  7. Android 仿微信朋友圈发动态功能(相册图片多选)

    代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...

  8. Android给listview的item设定高度

    在item的layout文件中,用android:layout_height设置item的高度.运行,高度设置无效. 解决办法: 给item设定minHeight,即可. -------------- ...

  9. Android为ListView的Item设置不同的布局

    MainActivity如下: package cc.testlistview; import java.util.ArrayList; import java.util.HashMap; impor ...

随机推荐

  1. java Web项目创建之一(普通java web项目的创建与发布)

    1.创建新的web项目 file->new_>Dynamic Web Project(如图) 或file->new->Project->Web->Dynamic W ...

  2. Electron使用与学习--(基本使用与菜单操作)

    对于electron是个新手,下面纯属个人理解.如有错误,欢迎指出.   一.安装 如果你本地按照github上的 # Install the `electron` command globally ...

  3. Vue.js 2.0 和 React、Augular等其他框架的全方位对比

    引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...

  4. 展望未来:使用 PostCSS 和 cssnext 书写 CSS

    原文链接:A look into writing future CSS with PostCSS and cssnext 译者:nzbin 像twitter,google,bbc使用的一样,我打算看一 ...

  5. nodejs利用ajax实现网页无刷新上传图片

    nodejs利用ajax实现网页无刷新上传图片 标签(空格分隔): nodejs 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转. 利用ajax技术和FormDat ...

  6. BPM配置故事之案例2-文本默认值

    Boss感觉方便了很多,然而采购部采购员阿海却还是有点意见,他跑来找小明. 阿海:现在申请都是我在提交,申请人和申请部门能不能不要每次都要填写啊,好麻烦的. 小明:没问题,这个简单. 小明在表单中把申 ...

  7. NSStringCompareOptions

    typedefNS_OPTIONS(NSUInteger, NSStringCompareOptions) { NSCaseInsensitiveSearch = 1,    //不区分大小写比较 N ...

  8. 在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY

    正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade   随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...

  9. Win10命令提示符(cmd)怎么复制粘贴

    在Win10系统里右键开始菜单,选择弹出菜单里的命令提示符,如下图所示: 然后复制要粘贴的文字,例如: echo hovertree.com 把上面的文字复制后,点击命令提示符窗口,然后在命令提示符窗 ...

  10. Storm

    2016-11-14  22:05:29 有哪些典型的Storm应用案例? 数据处理流:Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去.不像其它的流处理系统,Storm不 ...