Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件。

1、为了防止拖动ListView时,在列表末尾重复数据显示。需要加入 HashMap<Integer,View> lmap = new HashMap<Integer,View>();其中Integer为列表位置,View为子项视图,加入数据前首先if
(lmap.get(position)==null) ,满足条件时,加入lmap.put(position, convertView);如果条件不满足,convertView = lmap.get(position);

2、监听每个子控件时,一定要加入final int currentPosition=position;这样可以牢牢抓住每次点击的响应位置;最好把控件集成到类中。

    1. package logic;
    2. import java.util.HashMap;
    3. import java.util.List;
    4. import java.util.Map;
    5. import logic.PlaceAdapter.ViewHolder;
    6. import org.guiji.BigPictureActivity;
    7. import org.guiji.ClassUserListActivity;
    8. import org.guiji.CommentMoodActivity;
    9. import org.guiji.R;
    10. import org.guiji.UserHomeActivity;
    11. import support.ClassUserListImageDownloadTask;
    12. import support.ImageDownloadTask;
    13. import support.SystemConstant;
    14. import android.content.Context;
    15. import android.content.Intent;
    16. import android.text.Html;
    17. import android.view.LayoutInflater;
    18. import android.view.View;
    19. import android.view.ViewGroup;
    20. import android.view.View.OnClickListener;
    21. import android.widget.BaseAdapter;
    22. import android.widget.ImageView;
    23. import android.widget.TextView;
    24. public class ClassUserListAdapter extends BaseAdapter {
    25. HashMap<Integer,View> lmap = new HashMap<Integer,View>();
    26. private LayoutInflater mInflater=null;
    27. private List<Map<String, String>> mData=null;
    28. private ClassUserListImageDownloadTask imgtask=null;
    29. private Context context;
    30. public List<Map<String, String>> getmData() {
    31. return mData;
    32. }
    33. public void setmData(List<Map<String, String>> mData) {
    34. this.mData = mData;
    35. }
    36. public ClassUserListAdapter(Context context){
    37. this.mInflater = LayoutInflater.from(context);
    38. this.context=context;
    39. }
    40. @Override
    41. public int getCount() {
    42. return mData.size();
    43. }
    44. @Override
    45. public Object getItem(int position) {
    46. return mData.get(position);
    47. }
    48. @Override
    49. public long getItemId(int position) {
    50. return position;
    51. }
    52. @Override
    53. public View getView(int position, View convertView, ViewGroup parent) {
    54. ClassUserListViewHolder holder = null;
    55. if (lmap.get(position)==null) {
    56. imgtask=new ClassUserListImageDownloadTask();
    57. convertView = mInflater.inflate(R.layout.classuserlist_item, null);
    58. holder=new ClassUserListViewHolder();
    59. holder.classuserlist_item_userlogo=(ImageView)convertView.findViewById(R.id.classuserlist_item_userlogo);
    60. holder.classuserlist_item_username=(TextView)convertView.findViewById(R.id.classuserlist_item_username);
    61. holder.classuserlist_item_statuscontent=(TextView)convertView.findViewById(R.id.classuserlist_item_statuscontent);
    62. holder.classuserlist_item_idfans1=(TextView)convertView.findViewById(R.id.classuserlist_item_idfans1);
    63. holder.classuserlist_item_idfans2=(TextView)convertView.findViewById(R.id.classuserlist_item_idfans2);
    64. holder.classuserlist_item_idmood=(TextView)convertView.findViewById(R.id.classuserlist_item_idmood);
    65. holder.classuserlist_item_idhuoyuevalue=(TextView)convertView.findViewById(R.id.classuserlist_item_idhuoyuevalue);
    66. holder.classuserlist_item_msgpic=(ImageView)convertView.findViewById(R.id.classuserlist_item_msgpic);
    67. holder.classuserlist_item_msgcontent=(TextView)convertView.findViewById(R.id.classuserlist_item_msgcontent);
    68. holder.classuserlist_item_idtimeplace=(TextView)convertView.findViewById(R.id.classuserlist_item_idtimeplace);
    69. holder.classuserlist_item_classbutton=(ImageView)convertView.findViewById(R.id.classuserlist_item_classbutton);
    70. lmap.put(position, convertView);
    71. convertView.setTag(holder);
    72. holder.classuserlist_item_username.setText((String)mData.get(position).get("username"));
    73. if(mData.get(position).get("idstatuscontent")!=null){
    74. holder.classuserlist_item_statuscontent.setText((String)mData.get(position).get("idstatuscontent"));
    75. holder.classuserlist_item_statuscontent.setVisibility(0);
    76. }
    77. if(mData.get(position).get("idfans1")!=null){
    78. holder.classuserlist_item_idfans1.setText((String)mData.get(position).get("idfans1"));
    79. holder.classuserlist_item_idfans1.setVisibility(0);
    80. }
    81. if(mData.get(position).get("idfans2")!=null){
    82. holder.classuserlist_item_idfans2.setText((String)mData.get(position).get("idfans2"));
    83. holder.classuserlist_item_idfans2.setVisibility(0);
    84. }
    85. holder.classuserlist_item_idmood.setText((String)mData.get(position).get("idmood"));
    86. if(mData.get(position).get("idhuoyuevalue").length()>=4)
    87. holder.classuserlist_item_idhuoyuevalue.setText("活跃值"+"("+mData.get(position).get("idhuoyuevalue").substring(0, 4)+")");
    88. else
    89. holder.classuserlist_item_idhuoyuevalue.setText("活跃值"+"("+mData.get(position).get("idhuoyuevalue")+"0"+")");
    90. if(mData.get(position).get("idmsgcontent")!=null){
    91. holder.classuserlist_item_msgcontent.setText((String)mData.get(position).get("idmsgcontent"));
    92. holder.classuserlist_item_msgcontent.setVisibility(0);
    93. }
    94. if(mData.get(position).get("idtime")!=null){
    95. holder.classuserlist_item_idtimeplace.setText((String)mData.get(position).get("idtime")+"  "+(String)mData.get(position).get("idplace"));
    96. holder.classuserlist_item_idtimeplace.setVisibility(0);
    97. }
    98. String temp=SystemConstant.baseURLNone+mData.get(position).get("userlogo")+","+
    99. SystemConstant.baseURLNone+mData.get(position).get("idmsgpic");
    100. imgtask.execute(temp,holder);
    101. }else {
    102. convertView = lmap.get(position);
    103. holder = (ClassUserListViewHolder)convertView.getTag();
    104. }
    105. final int currentPosition=position;
    106. holder.classuserlist_item_userlogo.setOnClickListener(new OnClickListener() {
    107. @Override
    108. public void onClick(View v) {
    109. MainService.guiji.setCurrentURL(SystemConstant.baseURL+mData.get(currentPosition).get("userLink"));
    110. Intent it=new Intent(context,UserHomeActivity.class);
    111. context.startActivity(it);
    112. }
    113. });
    114. holder.classuserlist_item_username.setOnClickListener(new OnClickListener() {
    115. @Override
    116. public void onClick(View v) {
    117. MainService.guiji.setCurrentURL(SystemConstant.baseURL+mData.get(currentPosition).get("userLink"));
    118. Intent it=new Intent(context,UserHomeActivity.class);
    119. context.startActivity(it);
    120. }
    121. });
    122. holder.classuserlist_item_msgpic.setOnClickListener(new OnClickListener() {
    123. @Override
    124. public void onClick(View v) {
    125. MainService.guiji.setCurrentURL(SystemConstant.baseURLNone+mData.get(currentPosition).get("idmsgpic"));
    126. Intent it=new Intent(context,BigPictureActivity.class);
    127. context.startActivity(it);
    128. }
    129. });
    130. holder.classuserlist_item_idfans1.setOnClickListener(new OnClickListener() {
    131. @Override
    132. public void onClick(View v) {
    133. MainService.guiji.deleteReply(SystemConstant.baseURL+mData.get(currentPosition).get("idfans1link"));
    134. ((ClassUserListActivity) context).createTask();
    135. }
    136. });
    137. holder.classuserlist_item_idfans2.setOnClickListener(new OnClickListener() {
    138. @Override
    139. public void onClick(View v) {
    140. MainService.guiji.deleteReply(SystemConstant.baseURL+mData.get(currentPosition).get("idfans2link"));
    141. ((ClassUserListActivity) context).createTask();
    142. }
    143. });
    144. holder.classuserlist_item_classbutton.setOnClickListener(new OnClickListener() {
    145. @Override
    146. public void onClick(View v) {
    147. String temp=SystemConstant.baseURL+mData.get(currentPosition).get("idcommentlink");
    148. //              MainService.guiji.setCurrentURL(temp);
    149. MainService.guiji.setPageType(4);
    150. MainService.guiji.setBackURL(temp);
    151. Intent it=new Intent(context,CommentMoodActivity.class);
    152. context.startActivity(it);
    153. }
    154. });
    155. return convertView;
    156. }
    157. public class ClassUserListViewHolder{
    158. public ImageView classuserlist_item_userlogo;
    159. public TextView classuserlist_item_username;
    160. public TextView classuserlist_item_statuscontent;
    161. public TextView classuserlist_item_idfans1;
    162. public TextView classuserlist_item_idfans2;
    163. public TextView classuserlist_item_idmood;
    164. public TextView classuserlist_item_idhuoyuevalue;
    165. public ImageView classuserlist_item_msgpic;
    166. public TextView classuserlist_item_msgcontent;
    167. public TextView classuserlist_item_idtimeplace;
    168. public ImageView classuserlist_item_classbutton;
    169. }
    170. }

[转]Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件的更多相关文章

  1. 解决ListView中Item的子控件与Item点击事件冲突

    常常会碰到在ListView中点击当中一个Item.会一并触发其子控件的点击事件.比如Item中的Button.ImageButton等.导致了点击Item中Button以外区域也会触发Button点 ...

  2. Android listview子控件的的点击事件(转)

    1.先看图,是否是你想要的 2.布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout ...

  3. listView 解决焦点冲突问题 item项和子控件之间的冲突

    listView 在item布局的顶级布局中设置 android:descendantFocusability="blocksDescendants"可以阻止子控件获取焦点 这样使 ...

  4. 关于ListView中item与子控件抢夺焦点的解决方法

    1.在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button ...

  5. 初步探讨WPF的ListView控件(涉及模板、查找子控件) - GavinJun

    本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmln ...

  6. ListView中的Item点击事件和子控件的冲突或者item点击没有反应的解决的方法

    fragment中加入了button和checkbox这些控件.此时这些子控件会将焦点获取到.所以经常当点击item时变化的是子控件.item本身的点击没有响应. 这时候就能够使用descendant ...

  7. Android 布局之LinearLayout 子控件weight权重的作用详析(转)

    关于Android开发中的LinearLayout子控件权重android:layout_weigh参数的作用,网上关于其用法有两种截然相反说法: 说法一:值越大,重要性越高,所占用的空间越大: 说法 ...

  8. Android 布局之LinearLayout 子控件weight权重的作用详析

    关于Android开发中的LinearLayout子控件权重android:layout_weigh参数的作用,网上关于其用法有两种截然相反说法: 说法一:值越大,重要性越高,所占用的空间越大: 说法 ...

  9. Android ScrollView 子控件不占满的问题

    经常碰到很笨的 ScrollView的子控件无法占满 ScrollView 的空间的问题. 其实只需要加一行,android:fillViewport="true" 但不加上这行就 ...

随机推荐

  1. Java八种基本类型

    boolean 二进制位: true ,false   byte 二进制位:8 -128 - 127   -2的7次方到2的7次方-1 char 二进制位:16 0 - 65535   short 二 ...

  2. ubuntu的su初始密码设置

    Ubuntu刚安装后,不能在terminal中运行su命令,因为root没有默认密码,需要手动设定. 以安装ubuntu时输入的用户名登陆,该用户在admin组中,有权限给root设定密码. 给roo ...

  3. 94.Binary Tree Inorder Traversal---二叉树中序非递归遍历

    题目链接 题目大意:中序遍历二叉树.先序见144,后序见145. 法一:DFS,没啥说的,就是模板DFS.代码如下(耗时1ms): public List<Integer> inorder ...

  4. 45.Jump Game II---贪心---2018大疆笔试题

    题目链接 题目大意:与55题类似,只是这里要求出跳数. 法一(借鉴):贪心.cur表示当前能到达的最远距离,pre表示上一次能到达的最远距离,每到一个位置更新一次最远距离cur,如果当前位置超过了上一 ...

  5. 016 sleep,wait,yield,join区别

    1.线程通常有五种状态,创建,就绪,运行.阻塞和死亡状态.2.阻塞的情况又分为三种:(1).等待阻塞:运行的线程执行wait()方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中.进入 ...

  6. linux系统查找具体进程

    ps -ef | grep '查找内容' eg:ps -ef | grep '测试USB设备穿透'

  7. Codeforces 86D - Powerful array(莫队算法)

    题目链接:http://codeforces.com/problemset/problem/86/D 题目大意:给定一个数组,每次询问一个区间[l,r],设cnt[i]为数字i在该区间内的出现次数,求 ...

  8. 冒泡法的算法最佳情况下的时间复杂度为什么是O(n)

    我在许多书本上看到冒泡排序的最佳时间复杂度是O(n),即是在序列本来就是正序的情况下. 但我一直不明白这是怎么算出来的,因此通过阅读<算法导论-第2版>的2.2节,使用对插入排序最佳时间复 ...

  9. HTML常用标签及其属性

    基本 <html>…</html> 定义 HTML 文档 <head>…</head> 文档的信息 <meta> HTML 文档的元信息 & ...

  10. webStorage,离线缓存

    一.webStorage 1.目标 1.了解cookie的不足之处,引入webstorage的概念    2.学习并且掌握webstorage有哪两种    3.学习并且掌握sessionStorag ...