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

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;这样可以牢牢抓住每次点击的响应位置;最好把控件集成到类中。

[java] view plaincopy

    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. }
时间: 2024-08-26 02:25:41

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

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

经常会碰到在ListView中点击其中一个Item,会一并触发其子控件的点击事件,例如Item中的Button.ImageButton等,导致了点击Item中Button以外区域也会触发Button点击事件.在网上找了相关方法,这里记录下,亲测可行.. 1.在Item的xml文件根元素中添加属性:android:descendantFocusability="blocksDescendants" 2.在冲突的子控件中添加属性:android:focusable="false&

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

listView 在item布局的顶级布局中设置 android:descendantFocusability="blocksDescendants"可以阻止子控件获取焦点 这样使item项可以点击 这时其中的图片控件还是可以点击的当不想让item能点击时 可以不加上边的设置 并且将焦点转移到子控件 focusable属性 <TextView android:id="@+id/recommend_album_more" android:layout_width

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

1.在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button或者是CheckBox等控件以及其子类控件的时候,经常会碰到各种控件的点击事件冲突的情况,那么我们如何来处理Listview中这种控件之间焦点冲突的情况呢? 这里有三种解决方案 1.将ListView中的Item布局中的子控件focusable属性设置为false2.在getView方法中设置but

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

本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmlns:c="clr-namespace:System.Collections;assembly=mscorlib" 然后代码如下:   <c:ArrayList x:Key="stuList">            <local:Student Id=

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

fragment中添加了button和checkbox这些控件,此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应. 这时候就可以使用descendantFocusability来解决啦,API描述如下: android:descendantFocusability 该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系. 属性的值有三种: beforeDescendants:viewgroup会优先其子类控件而获取到焦点

Android嵌套滑动控件的冲突解决和ViewPager适配当前子控件高度不留空白的办法

最近项目有一个需求,需要多层可滑动控件的嵌套展示,demo效果如下,demo的下载地址在最后 咋一看好像挺简单啊,不就是一个ScrollView + ViewPager + ListView吗,我开始也这样觉得,也用的这种方式实现,结果始终和效果不对劲.这里总结几点问题: 两个或两个以上的滑动控件嵌套时,如果layout_height采用的是wrap_content会造成内部滑动控件的高度不能正确的计算,会导致内部滑动控件的高度始终为0,除非你用定值设置,比如300dp. 两个相同滑动方向的滑动

Android自定义控件系列七:详解onMeasure()方法中如何测量一个控件尺寸(一)

转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45027641 自定义view/viewgroup要重写的几个方法:onMeasure(),onLayout(),onDraw().(不熟悉的话可以查看专栏的前几篇文章:Android自定义控件系列二:自定义开关按钮(一)). 今天的任务就是详细研究一下protected void onMeasure(int widthMeasureSpec, int heightMeasureSpe

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

关于Android开发中的LinearLayout子控件权重android:layout_weigh参数的作用,网上关于其用法有两种截然相反说法: 说法一:值越大,重要性越高,所占用的空间越大: 说法二:值越大,重要性越低,所占用的空间越小. 到底哪个正确?哪个错误?抑或还有其他解释?请点击查看关于weight 权重参数作用的详分析: 其实这两种情况都不太准确: 准确的解释是,weight 权限 是用于分配父控件某一方向上尺寸-所有子控件在该方向上设定尺寸和 所得值的一个参数,把这个相减得到的结

如果希望点击父控件子控件也响应的话, 可以给子控件加如下属性: ?android:duplicateParentState="true"

如果希望点击父控件子控件也响应的话, 可以给子控件加如下属性: android:duplicateParentState="true" 来自为知笔记(Wiz)