ListView 的 item 中插入 GridView
来源:互联网 发布:英雄杀今天探宝数据 编辑:程序博客网 时间:2024/05/01 03:13
先上张效果图:
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 mUserInfo = new ArrayList<>();
mUserInfo .add(你配置好的UserInfo);
mWeChat .setData(mUserInfo);
mListview .setAdapter(mWeChat );
- ListView 的 item 中插入 GridView
- listview的item中嵌套gridview问题
- GridView/ListView的item中使用CheckBox的问题
- 在GridView或ListView的Item中,嵌入Button
- Android ListView/GridView的item中 CheckBox状态错乱
- ListView GridView中item加载显示的动画效果
- listView和gridView中item复用的相关问题
- android实现ListView或GridView中item的倒数功能
- Android中ListView或者GridView的Item和Item中控件的事件冲突
- listView / gridView 中手动添加一个Item
- GridView, ListView的item中嵌入button或其他view导致item点击失效的研究
- ListView的item布局中嵌套GridView,GridView显示不全的问题
- 机顶盒开发 ListView嵌套GridView GridView中ChildView和Item的焦点
- 怎么获取ListView和GridView适配器中item上TextView和ListView控件的值
- ListView与GridView的item中使用ImageView的android:scaleType属性失效问题
- listview或gridview中item的点击事件与控件点击事件冲突的解决
- ListView或GridView嵌入ScrollView中时,只显示一个Item并且默认将此Item置顶的问题解决办法
- win8中ListView、GridView、ListBox如何更改Item的背景色、间距之类等?
- java内存机制(堆、栈、方法区)
- json转list实现方案
- Android动态加载技术
- js 实现各种排序
- 简单tab选项卡切换代码教程
- ListView 的 item 中插入 GridView
- TCP可靠传输的实现[流量控制、拥塞控制]
- nova network-vif-plugged事件分析1
- Android显示圆角图片,可指定图片某几个角为圆角
- 使用Jetty启动WEB,请求报错java.lang.IllegalStateException: Form too large: 206150 > 200000
- L3-002. 堆栈-PAT团体程序设计天梯赛GPLT(树状数组)
- 1507: [NOI2003]Editor
- 枚举类中随机获取枚举
- python组合列表对应位置元素成为元组数组 zip