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. tf.segment_sum和tf.unsorted_segment_sum理解实例

    本文来自 guotong1988 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/guotong1988/article/details/77622790 import ...

  2. [Leetcode] Longest Palindromic Subsequence

    Longest Palindromic Subsequence 题解 题目来源:https://leetcode.com/problems/longest-palindromic-subsequenc ...

  3. 内存不够清理方法,costdown项目时如果裁剪不下来,也可以参考

    Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...

  4. 谁说运维用ELK没用?我就说很有用,只是你之前不会用【转】

    1.安装JDK 1)登陆ORACLE官网 (http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html ...

  5. Serv-U设置允许用户更改密码【转】

    最近,公司上了一套Serv-U10.5.0.6的ftp软件,应该是目前最新的版本了.上的第一天就遇到了一个问题,有领导发话了,他需要自己更改密码.找了N久才找到,分享一下. 点击管理界面的用户. 进入 ...

  6. mac下 mysql / nginx 问题总汇

    "ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)&q ...

  7. vundle+vim8+php+xdebug

    vundle 一开始容易被坑,vundle的运行方法是自己下载,不是自己下载,在安装上vundle后,直接修改~/.vimrc中,Plugin增加插件,然后运行PluginInstall即可安装 vi ...

  8. .htaccess教程:简介、访问控制、验证、目录浏览控制

    一..htaccess简介 1.什么是.htaccess .htaccess是一个纯文本文件,里面存放着Apache服务器配置相关的一些指令,它类似于Apache的站点配置文件,如httpd.conf ...

  9. PlantUML——3.Graphviz的安装

    官网:http://www.graphviz.org/Home.php   由于plantuml使用Graphviz来生成相关图形(只有序列图可以不依赖它),其它图形都需要, 因此得安装它,否则生成图 ...

  10. intellij idea 远程tomcat 调试

    由于在服务器上远程调试风险较高,所以万不得已的情况下 不要这样做.可以本地调试好  再上传到服务器上. 1.关闭防火墙 启动Firewalld,及开机自启. # systemctl start fir ...