android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。

转载请声明出处(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

 1 package cn.share.bananacloud.custom_listview_style;
 2
 3 /**
 4  * Created by Administrator on 2015/9/6.
 5  */
 6 public class UserImgs {
 7
 8     public int id; //图片的id
 9     public String name; //图片的名称
10     public String urls; //图片的 url
11
12     public int getId() {
13         return id;
14     }
15     public void setId(int id) {
16         this.id = id;
17     }
18     public String getName() {
19         return name;
20     }
21     public void setName(String name) {
22         this.name = name;
23     }
24     public String getUrls() {
25         return urls;
26     }
27     public void setUrls(String urls) {
28         this.urls = urls;
29     }
30 }

第二个,UserInfo

 1 package cn.share.bananacloud.custom_listview_style;
 2
 3 /**
 4  * Created by LinGuanHong--af913337456 on 2015/9/6.
 5  * qq:913337456
 6  * email:[email protected]
 7  */
 8 import java.util.ArrayList;
 9 import java.util.List;
10 public class UserInfo {
11     private String headUrl; // 头像 url
12     private String usertext; // 帖子内容
13     private String username; // 用户名称
14     private String usertime; // 发帖时间
15     private String usertalknumber; // 评论数目
16     private List<UserImgs> ui = new ArrayList<UserImgs>(); // 这个就是我说的,UserImgs 实例
17     //--------------------------------------- headUrl
18     public String getHeadUrl() {
19         return headUrl;
20     }
21
22     public void setHeadUrle(String headUrl) {
23         this.headUrl = headUrl;
24     }
25     //--------------------------------------- Name
26     public String getUserName() {
27         return username;
28     }
29
30     public void setUserName(String username) {
31         this.username = username;
32     }
33     //--------------------------------------- Text
34     public String getUserText() {
35         return usertext;
36     }
37
38     public void setUserText(String usertext) {
39         this.usertext = usertext;
40     }
41     //---------------------------------------- Time
42     public String getUserTime() {
43         return usertime;
44     }
45
46     public void setUserTime(String usertime) {
47         this.usertime = usertime;
48     }
49     //---------------------------------------- TalkNumber
50     public String getUserTalkNumber() {
51         return usertalknumber;
52     }
53
54     public void setUserTalkNumber(String usertalknumber) {
55         this.usertalknumber = usertalknumber;
56     }
57     //----------------------------------------  post pics and mp3 or mp4
58     public List<UserImgs> getUi() {
59         return ui;
60     }
61     public void setUi(List<UserImgs> ui) {
62         this.ui = ui;
63     }
64 }

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

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

  1 package cn.share.bananacloud.custom_listview_style;
  2
  3 /**
  4  * Created by Administrator on 2015/9/6.
  5  */
  6
  7 import android.content.Context;
  8 import android.graphics.Bitmap;
  9 import android.util.Log;
 10 import android.view.LayoutInflater;
 11 import android.view.View;
 12 import android.view.ViewGroup;
 13 import android.widget.AdapterView;
 14 import android.widget.BaseAdapter;
 15 import android.widget.ImageView;
 16 import android.widget.TextView;
 17
 18 import com.lgh.addItemListview.mymodule.app2.SharePreferenceHelper;
 19 import com.nostra13.universalimageloader.core.ImageLoader;
 20 import com.nostra13.universalimageloader.core.assist.FailReason;
 21 import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
 22
 23 import java.util.List;
 24
 25 import cn.share.bananacloud.InternetHelper;
 26 import cn.share.bananacloud.R;
 27 import cn.share.bananacloud.commonDataHelper;
 28 import cn.share.bananacloud.imageLoderHelper;
 29
 30 public class WeChatAdapter extends BaseAdapter {
 31
 32     protected ImageLoader imageLoader = ImageLoader.getInstance();
 33     private List<UserInfo> mList;
 34     private Context mContext;
 35     SharePreferenceHelper sp;
 36     public WeChatAdapter(Context _context) {
 37         this.mContext = _context;
 38         sp = new SharePreferenceHelper(mContext,"loginrecord",null);
 39     }
 40
 41     public void setData(List<UserInfo> _list) { //这个函数是数据主入口
 42         this.mList = _list;
 43     }
 44
 45     @Override
 46     public int getCount() {
 47         return mList.size();
 48     }
 49
 50     @Override
 51     public UserInfo getItem(int position) {
 52         return mList.get(position);
 53     }
 54
 55     @Override
 56     public long getItemId(int position) {
 57         return position;
 58     }
 59
 60     @Override
 61     public View getView(int position, View convertView, ViewGroup parent) {
 62         ViewHolder holder;
 63         if (convertView == null) {
 64             holder = new ViewHolder();
 65             convertView = LayoutInflater.from(mContext).inflate(R.layout.bbs_main_item, parent, false);
 66             holder.gridView = (NoScrollGridView) convertView.findViewById(R.id.gridView);
 67             holder.userHead = (ImageView) convertView.findViewById(R.id.bbs_main_lv_userhead);
 68             holder.username = (TextView) convertView.findViewById(R.id.bbs_main_lv_username);
 69             holder.usertext = (TextView) convertView.findViewById(R.id.bbs_main_lv_item_text);
 70             holder.usertime = (TextView) convertView.findViewById(R.id.bbs_main_lv_usertime);
 71             holder.usertalknumber = (TextView) convertView.findViewById(R.id.bbs_main_lv_item_talknumber);
 72             convertView.setTag(holder);
 73         } else {
 74             holder = (ViewHolder) convertView.getTag();
 75         }
 76         UserInfo mUserInfo = getItem(position);
 77         if (mList != null && mList.size() > 0) { // 判断是否有数据
 78             showHeadImage(holder.userHead,mList.get(position).getHeadUrl());
 79             holder.username.setText(mList.get(position).getUserName());
 80             holder.usertext.setText(mList.get(position).getUserText());
 81             holder.usertime.setText(mList.get(position).getUserTime());
 82             holder.usertalknumber.setText(mList.get(position).getUserTalkNumber());
 83
 84             if(mUserInfo.getUi().size()>0) { //这里判断该组数据是否有 gridView 的图片url数据,有才进入 gridView的配置
 85                 holder.gridView.setVisibility(View.VISIBLE);
 86                 holder.gridView.setAdapter(new MyGridAdapter(mUserInfo.getUi(), mContext));
 87                 // 这里我把 GridView的 item 点击监听给去掉了,防止冲突,而且我项目不需要。
 88                 /*holder.gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 89                     @Override
 90                     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 91                         Log.d("zzzzz","--onItem--"+position);
 92                         // imageBrower(position,bean.urls);
 93                     }
 94                 });*/
 95             }else{ // 一定要加 else 防止GridView 的数据重复显示,在不同的 item 上面
 96                 holder.gridView.setVisibility(View.GONE);
 97                 holder.gridView.setAdapter(null);
 98             }
 99         }
100         //去掉 gridView 的 item 点击
101         holder.gridView.setClickable(false);
102         holder.gridView.setPressed(false);
103         holder.gridView.setEnabled(false);
104         return convertView;
105     }
106
107     public class ViewHolder {
108         NoScrollGridView gridView;
109         TextView username,usertext,usertime,usertalknumber;
110         ImageView userHead;
111     }
112
113     public void showHeadImage(ImageView view,String url){
114         //Log.d("zzzzz",""+useraccount.get((int)data));
115         if (url!=null) {
116             if (InternetHelper.checkConnection(mContext)) {
117                 try {
118                     imageLoader.displayImage(
119                             url,
120                             view,
121                             imageLoderHelper.getLoderOption(145, R.drawable.user_default_head, 80),
122                             new ImageLoadingListener() {
123                                 @Override
124                                 public void onLoadingStarted(String s, View view) {
125
126                                 }
127
128                                 @Override
129                                 public void onLoadingFailed(String s, View view, FailReason failReason) {
130
131                                 }
132
133                                 @Override
134                                 public void onLoadingComplete(String s, View view, Bitmap bitmap) {
135                                     if(s.contains(InternetHelper.exchangeUserAccount(sp.getOneInfo("useraccount", "-1")))) {
136                                         imageLoader.getDiskCache().remove(s);//clear old cache
137                                     }
138                                 }
139
140                                 @Override
141                                 public void onLoadingCancelled(String s, View view) {
142
143                                 }
144                             }
145                     );
146                 } catch (Exception ignored){}
147             } else {
148                 // load but doesn‘t remove local cache
149                 imageLoader.displayImage
150                         (
151                                 commonDataHelper.rootUrl+"uploadpic/" + InternetHelper.exchangeUserAccount(url).trim() + "/head.jpg",
152                                 view,
153                                 imageLoderHelper.getLoderOption(145, R.drawable.user_default_head, 80)
154                         );
155             }
156         } else {
157             Log.d("zzzzz", "useraccount.size() is 0");
158         }
159     }
160 }

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

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

 1 package cn.share.bananacloud.custom_listview_style;
 2
 3 /**
 4  * Created by Administrator on 2015/9/6.
 5  */
 6
 7 import android.content.Context;
 8 import android.view.LayoutInflater;
 9 import android.view.View;
10 import android.view.ViewGroup;
11 import android.widget.BaseAdapter;
12 import android.widget.ImageView;
13
14
15 import com.nostra13.universalimageloader.core.ImageLoader;
16
17 import java.util.List;
18
19 import cn.share.bananacloud.R;
20 import cn.share.bananacloud.imageLoderHelper;
21
22 public class MyGridAdapter extends BaseAdapter {
23
24     private List<UserImgs> mUI;
25     protected ImageLoader imageLoader = ImageLoader.getInstance();
26     private LayoutInflater mLayoutInflater;
27
28     public MyGridAdapter(List<UserImgs> ui, Context context) {
29         mLayoutInflater = LayoutInflater.from(context);
30         this.mUI = ui;
31     }
32
33     @Override
34     public int getCount() {
35         return mUI == null ? 0 : mUI.size();
36     }
37
38     @Override
39     public String getItem(int position) {
40         return mUI.get(position).urls;
41     }
42
43     @Override
44     public long getItemId(int position) {
45         return position;
46     }
47
48     @Override
49     public View getView(int position, View convertView, ViewGroup parent) {
50         MyGridViewHolder viewHolder;
51         if (convertView == null) {
52             viewHolder = new MyGridViewHolder();
53             convertView = mLayoutInflater.inflate(R.layout.user_img_item,parent, false);
54             viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_user_img);
55             convertView.setTag(viewHolder);
56         } else {
57             viewHolder = (MyGridViewHolder) convertView.getTag();
58         }
59         String url = getItem(position);
60         imageLoader.displayImage(url, viewHolder.imageView, imageLoderHelper.getLoderOption(180, 0, 0));
61         return convertView;
62     }
63     private static class MyGridViewHolder {
64         ImageView imageView;
65     }
66 }

代码使用例子

ListView mListview  = new ListView();

WeChatAdapter mWeChat = new WeChatAdapter (context);

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

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

mWeChat .setData(mUserInfo);

mListview .setAdapter(mWeChat );

打完收工。

时间: 2024-10-06 00:56:40

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

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

※效果 ※使用到的开源库 PhotoView 图片缩放:支持双击缩放,手指捏拉缩放 https://github.com/chrisbanes/PhotoView Universalimageloader 图片下载缓存库 https://github.com/nostra13/Android-Universal-Image-Loader ViewPagerIndicator 分页指示器 https://github.com/JakeWharton/Android-ViewPagerIndicat

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

转载请注明出处:http://blog.csdn.net/allen315410/article/details/40264551 看博文之前,希望大家先打开自己的微信点到朋友圈中去,仔细观察是不是发现朋友圈里的有个"九宫格"的图片区域,点击图片又会跳到图片的详细查看页面,并且支持图片的滑动和缩放?这个功能是不是很常用呢?!那么我今天正好做了这个Demo,下面为大家讲解一下.首先按照惯例先看一下效果图吧,尤其不会录制gif动画(哎~没办法,模拟器不支持多点触控,刚好我的手机又没有Roo

Android 修改源码自定义SwipeRefreshLayout样式——高仿微信朋友圈下拉刷新

修改源码自定义SwipeRefreshLayout样式——高仿微信朋友圈下拉刷新 原文地址:https://www.cnblogs.com/zhujiabin/p/8194996.html

安卓Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

ListView的Item中带按钮以及按钮布局的显示与隐藏

一.上图 二.图片功能解说 1.点击ListView中其中的一项,Item中处于隐藏状态的操作按钮部分布局显示,其他项显示的布局同时被隐藏,再次点击该项,操作按钮部分布局再次隐藏. 2.点击各个按钮,分别弹出哪个按钮被点击(也就是点击每一个按钮分别处理不同按钮的业务功能). 三.实现代码主要处于适配器的处理.见如下代码: package com.test.listviewbtn.adapters; import java.util.ArrayList; import android.conten

ListView的Item中包含checkbox,Item无法点击的3种解决方案

ListView的Item中包含checkbox,Item无法点击的2种解决方案 1.在checkbox中设置`focusable属性 android:focusable="false" 2.设置Item的布局,焦点不向下传递 android:descendantFocusability="blocksDescendants"

为listview的item中的元素设置onclick事件

表达能力比较差,所以现在解释一下标题的意思:listview的列表项,点击的时候触发的是itemOnClick事件,点击后转向到A页:那么,假如在子项中有一个连接是想转到B页,我们该怎么办呢.这样能明白了吧,好,现在我说一下解决的办法:有两种办法,一种是重写adapter,一种是在你的子项中的元素中设置onclick事件(注意,是在xml中设置onclick元素)我只做了第一种方法,演示如下:我们继承adapter的基类,然后重写getView @SuppressWarnings("unchec

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

NineGridLayout 一个仿微信朋友圈和QQ空间的九宫格图片展示自定义控件. GitHub:https://github.com/HMY314/NineGridLayout 一.介绍 1.当只有1张图时,可以自己定制图片宽高,也可以使用默认九宫格的宽高: 2.当只有4张图时,以2*2的方式显示: 3.除以上两种情况下,都是按照3列方式显示,但这时有一些细节: a.如果只有9张图,当然是以3*3的方式显示: b.如果超过9张图,可以设置是否全部显示. 如果设置不完全显示,则按照3*3的方式