android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。
分类:
IT文章
•
2022-05-12 21:12:39
转载请声明出处(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 }
View Code
第二个,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:913337456@qq.com
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 }
View Code
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 }