解决android expandablelistview 里面嵌入gridview行数据重复问题
最近做了一个“csdn专家博客App” 当然了是android版本,在专家浏览页面,我才用了expandablelistview 组件来显示专家分类,每个分类点击之后可以显示专家的头像和名字。
很简单一个功能,先看效果图:
结果发现一个问题,就是每个分类里的数据存在重复插入好几次的现象;
ExpertGridAdapter.java gridview的adapter
- public class ExpertGridAdapter extends BaseAdapter {
- private LayoutInflater inflater;
- private CsBlogger[] datals;
- private Context mContext;
- private String TAG="ExpertGridAdapter";
- public ExpertGridAdapter(Context context,List<CsBlogger> childs) {
- this.inflater = LayoutInflater.from(context);
- datals=new CsBlogger[childs.size()];
- childs.toArray(datals);
- CsLog.d("maomao", "childs.size:"+childs.size());
- mContext=context;
- }
- @Override
- public int getCount() {
- return datals.length;
- }
- @Override
- public Object getItem(int position) {
- return datals[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=this.inflater.inflate(R.layout.csblog_expert_item_menu, null);
- holder.iv=(ImageView) convertView.findViewById(R.id.item_image);
- holder.tv=(TextView) convertView.findViewById(R.id.item_text);
- convertView.setTag(holder);
- }
- else {
- holder=(ViewHolder) convertView.getTag();
- }
- CsBlogger expert=datals[position];
- DisplayImageOptions options; // 显示图像设置
- ImageLoader imageLoader = ImageLoader.getInstance();// 得到图片加载器
- // 图片加载器初始化
- imageLoader.init(ImageLoaderConfiguration.createDefault(mContext));
- // 使用DisplayImageOptions.Builder()创建DisplayImageOptions
- options = new DisplayImageOptions.Builder()
- .showStubImage(R.drawable.blogger) // 设置图片下载期间显示的图片
- .showImageForEmptyUri(R.drawable.blogger) // 设置图片Uri为空或是错误的时候显示的图片
- .showImageOnFail(R.drawable.blogger) // 设置图片加载或解码过程中发生错误显示的图片
- .cacheInMemory() // 设置下载的图片是否缓存在内存中
- .cacheOnDisc() // 设置下载的图片是否缓存在SD卡中
- .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
- .build(); // 创建配置过得DisplayImageOption对象
- // 异步加载图片 专家头像
- imageLoader
- .displayImage(expert.getUserface(), holder.iv, options);
- holder.tv.setText(expert.getNickname());
- return convertView;
- }
- private class ViewHolder{
- ImageView iv;
- TextView tv;
- }
- }
ExpertsListViewAdapter.java 可扩展的listview
- public class ExpertsListViewAdapter extends BaseExpandableListAdapter implements
- OnItemClickListener
- {
- public static final int ItemHeight = 136;// 每项的高度
- public static final int PaddingLeft = 96;// 每项的高度
- private int myPaddingLeft = 0;
- private List<TreeNode> treeNodes = new ArrayList<TreeNode>();
- private Context parentContext;
- private LayoutInflater layoutInflater;
- public ExpertsListViewAdapter(Context view, int myPaddingLeft,List<TreeNode> treeNodes)
- {
- parentContext = view;
- this.myPaddingLeft = myPaddingLeft;
- this.treeNodes=treeNodes;
- }
- public void RemoveAll()
- {
- treeNodes.clear();
- }
- public CsBlogger getChild(int groupPosition, int childPosition)
- {
- return treeNodes.get(groupPosition).childs.get(childPosition);
- }
- @Override
- public int getChildrenCount(int groupPosition)
- {
- //return treeNodes.get(groupPosition).childs.size();
- // 返回值必须为1,否则会重复数据
- return 1;
- }
- public TextView getTextView(Context context)
- {
- AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
- ViewGroup.LayoutParams.FILL_PARENT, ItemHeight);
- TextView textView = new TextView(context);
- textView.setLayoutParams(lp);
- textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
- return textView;
- }
- class ExpandableListHolder {
- CsGridView grdiview;
- }
- private ExpertGridAdapter adatper;
- /**
- * 可自定义ExpandableListView
- */
- public View getChildView(int groupPosition, int childPosition,
- boolean isLastChild, View convertView, ViewGroup parent)
- {
- CsLog.d("maomao", "getChildView, groupPosition:"+groupPosition+",childs size:"+treeNodes.get(groupPosition).childs.size());
- //if (convertView == null)
- {
- CsLog.d("maomao", "converView is null");
- layoutInflater = (LayoutInflater) parentContext
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- convertView = layoutInflater.inflate(R.layout.csblog_expert_view, null);
- CsGridView toolbarGrid = (CsGridView) convertView
- .findViewById(R.id.GridView_toolbar);
- toolbarGrid.setNumColumns(4);// 设置每行列数
- toolbarGrid.setGravity(Gravity.CENTER);// 位置居中
- toolbarGrid.setHorizontalSpacing(10);// 水平间隔
- adatper=new ExpertGridAdapter(parentContext,treeNodes.get(groupPosition).childs);
- toolbarGrid.setAdapter(adatper);// 设置菜单Adapter
- toolbarGrid.setOnItemClickListener(this);
- adatper.notifyDataSetChanged();
- }
- //else{
- // CsLog.d("maomao", "convertView!=null");
- //}
- return convertView;
- }
- /**
- * 可自定义list
- */
- public View getGroupView(int groupPosition, boolean isExpanded,
- View convertView, ViewGroup parent)
- {
- TextView textView = getTextView(this.parentContext);
- String gname=getGroup(groupPosition).toString()+"("+treeNodes.get(groupPosition).childs.size()+")";
- textView.setText(gname);
- textView.setPadding(myPaddingLeft + PaddingLeft, 0, 0, 0);
- return textView;
- }
- public long getChildId(int groupPosition, int childPosition)
- {
- return childPosition;
- }
- public Object getGroup(int groupPosition)
- {
- return treeNodes.get(groupPosition).parent;
- }
- public int getGroupCount()
- {
- return treeNodes.size();
- }
- public long getGroupId(int groupPosition)
- {
- return groupPosition;
- }
- public boolean isChildSelectable(int groupPosition, int childPosition)
- {
- return true;
- }
- public boolean hasStableIds() {
- return true;
- }
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id)
- {
- Toast.makeText(parentContext, "当前选中的是:" + position, Toast.LENGTH_SHORT)
- .show();
- }
- }
大家注意这个方法,知道这两种写法的区别吗? 当然 return1 ,就可以得到上面截图的效果。
- @Override
- public int getChildrenCount(int groupPosition)
- {
- //return treeNodes.get(groupPosition).childs.size();
- // 返回值必须为1,否则会重复数据
- return 1;
- }
- 加入CSDN技术群:221057495 与我交流
解决android expandablelistview 里面嵌入gridview行数据重复问题的更多相关文章
- 缓存AsimpleCache -- 解决Android中Sharedpreferences无法存储List数据/ASimpleCache
Sharedpreferences想必大家在项目中都经常会用到,但是如果需要在本地需要存储比较多的数据,存储一个集合的时,发现Sharedpreferences并不 是那么好使了. 分析 如果需要在本 ...
- [Jacky] 解决Ext.Net GridPanel 选择的行数据刷新后不能获取最新值
选择GridPanel中一行数据,当变更数据时并重新刷新之后不能获取最新值,需通过如下方式获取: var internalId = gridPanel.getSelectionModel().getL ...
- 解决Android与服务器交互大容量数据问题
对于目前的状况来说,移动终端的网络状况没有PC网络状况那么理想.在一个Android应用中,如果需要接收来自服务器的大容量数据,那么就不得不考虑客户的流量问题.本文根据笔者的一个项目实战经验出发,解决 ...
- 转载 解决Android与服务器交互大容量数据问题
对于目前的状况来说,移动终端的网络状况没有PC网络状况那么理想.在一个Android应用中,如果需要接收来自服务器的大容量数据,那么就不得不考虑客户的流量问题.本文根据笔者的一个项目实战经验出发,解决 ...
- ASP.NET 使用AJAX让GridView的数据行显示提示框(ToolTip)
介绍ASP.NET AJAX可以使你的web应用程序具有更丰富的功能和更多的用户响应. 本文中,我将演示如何通过ASP.NET AJAX的帮助,给像GridView这样的数据绑定控件的数据行增加pop ...
- 在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了?
在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了? 在删除成功后,加上这句话就可以了:$("#dg").datagrid ...
- GridView中数据行的操作
一个是直接动态绑定gridview 用3楼的办法就可以了 int j=1;//j的数值表示你要取的那一列的索引,要取第二列,j就设为1for (int i = 0; i < this.GridV ...
- Android——MeasureSpec学习 - 解决ScrollView嵌套ListView和GridView冲突的方法
原文地址:http://blog.csdn.net/yuhailong626/article/details/20639217 在自定义View和ViewGroup的时候,我们经常会遇到int ...
- PB笔记之第一行数据不能删除的解决方法
如果第一行数据不能删除,则单独写SQL进行删除 window lw_sheet //dw_1.event pfc_deleterow()long i String ls_manidInteger ls ...
随机推荐
- CentOS基础指令备忘
功能 指令 可用参数 示例 说明 新建文件夹 mkdir mkdir etc/temp 在当前目录的etc文件夹下新建temp文件夹 新建文件 vi vi abc.sh 新建名为abc.sh的 ...
- ajax加载表格数据
一.html代码 <style type="text/css"> .table-taskinfo table tr { border-top: 2px solid #9 ...
- Divide and Conquer:Monthly Expense(POJ 3273)
Monthly Expense 题目大意:不废话,最小化最大值 还是直接套模板,不过这次要注意,是最小化最大值,而不是最大化最小值,判断的时候要注意 联动3258 #include <iostr ...
- WCF错误:413 Request Entity Too Large
在我们用WCF传输数据的时候,如果启用默认配置,传输的数据量过大,经常会出这个错误. WCF包含服务端与客户端,所以这个错误可能出现在服务端返回数据给客户端,或客户端传数据给服务端时. 1. 服务端返 ...
- iOS 一个控件只能拥有一个父类
不多说上图.多么惨痛的教训,一个子控件 只有最后的一个被addsubview才会生效.
- [Linux] vim的高亮查找操作
reference : http://blog.chinaunix.net/uid-20732478-id-763411.html 使用了VIM这么久,却一直无法牢记一些基本的操作指令.今天查找一个 ...
- 安装CocoaPods报错 - [!] The dependency `AFNetworking (~> 3.1.0)` is not used in any concrete target.
今天新机装cocopods时,等安装完毕发觉出现[!] The dependency `AFNetworking (~> 3.1.0)` is not used in any concrete ...
- hadoop2.x NameNode 的共享存储实现
过去几年中 Hadoop 社区涌现过很多的 NameNode 共享存储方案, 比如 shared NAS+NFS.BookKeeper.BackupNode 和 QJM(Quorum Journal ...
- python获取指定星期的日期
- Linux Shell 高级编程技巧3----运行级别脚本介绍
3.运行级别脚本介绍 3.1.运行级别 运行级别介绍: 0 关机 1 单用户模式 2 多用户模式 ...