昨天晚上小伙伴突然来信, ListView item中嵌套的TextView 无法获取长按事件

从前从来没有仔细留意过, coding后发现...果然没什么动静

而且没有合适的API让我调用获取TextView 的 setOnLongClickListener 事件

思考ing

ListView几大要素

xml: item模板 --- 这个不可能绑定事件

java: ListView本身 --- 有可能, 但是本身没有提供API

adapter: 直接使用现成的 SimpleAdapter --- 无法做到, 以前做过重写Adapter的事好像...

有个 getView 方法是必须重写的, 然后里面貌似可以操作单个控件 .... 恩 有可能,动手试试

定义MyAdapter类:

  1. import android.content.Context;
  2. import android.util.Log;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import android.widget.BaseAdapter;
  7. import android.widget.TextView;
  8.  
  9. import java.util.List;
  10. import java.util.Map;
  11.  
  12. /**
  13. * Created by root on 15-11-6.
  14. */
  15. public class MyAdapter extends BaseAdapter {
  16. LayoutInflater mLayoutInflater;
  17. List<Map<String, Object>> mData;
  18. public static final String KEY_NAME = "name";
  19.  
  20. // Context context, MyAdapter
  21. public MyAdapter(Context context, List<Map<String, Object>> data) {
  22. mLayoutInflater = LayoutInflater.from(context);
  23. mData = data;
  24. }
  25.  
  26. @Override
  27. public View getView(int position, View convertView, ViewGroup parent) {
  28.  
  29. if(convertView == null) {
  30. convertView = mLayoutInflater.inflate(R.layout.listview_item_text, null);
  31. TextView tv = (TextView) convertView.findViewById(R.id.text1);
  32. tv.setText(mData.get(position).get(KEY_NAME).toString());
  33. tv.setOnLongClickListener(new View.OnLongClickListener() {
  34. @Override
  35. public boolean onLongClick(View v) {
  36. Log.d("carlozlog", "TextView be long click");
  37. return true;
  38. }
  39. });
  40.  
  41. }
  42.  
  43. return convertView;
  44. }
  45.  
  46. @Override
  47. public int getCount() {
  48. return mData.size();
  49. }
  50.  
  51. @Override
  52. public Object getItem(int position) {
  53. return null;
  54. }
  55.  
  56. @Override
  57. public long getItemId(int position) {
  58. return 0;
  59. }
  60. }

此处用到一个ListViiew的 item 模板

listview_item_text.xml

  1. <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:id="@+id/text1"
  3. android:layout_width="fill_parent"
  4. android:textColor="#000000"
  5. android:layout_height="50dp" />

使用adaper:  MainActivity.java 中

  1. public class MainActivity extends AppCompatActivity {
  2. // view
  3. private ListView listView1;
  4. // data
  5. Context mContext;
  6. //SimpleAdapter mSimpleAdapter;
  7. MyAdapter mMyAdapter;
  8. String tag = "carlozlog";
  9.  
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. mContext = getApplicationContext();
  15.  
  16. Map<String, Object> map1 = new HashMap<>();
  17. map1.put(MyAdapter.KEY_NAME, "Hello World");
  18. Map<String, Object> map2 = new HashMap<>();
  19. map2.put(MyAdapter.KEY_NAME, "Lu Xun");
  20. Map<String, Object> map3 = new HashMap<>();
  21. map3.put(MyAdapter.KEY_NAME, "Zhu De");
  22. Map<String, Object> map4 = new HashMap<>();
  23. map4.put(MyAdapter.KEY_NAME, "Lao Mao");
  24.  
  25. List<Map<String, Object>> listData = new ArrayList<>();
  26. listData.add(map1);
  27. listData.add(map2);
  28. listData.add(map3);
  29. listData.add(map4);
  30.  
  31. //mSimpleAdapter = new SimpleAdapter(mContext, listData, R.layout.listview_item_text, new String[]{"name"}, new int[]{R.id.text1});
  32.  
  33. mMyAdapter = new MyAdapter(mContext, listData);
  34. listView1 = (ListView)findViewById(R.id.listview1);
  35. listView1.setAdapter(mMyAdapter);
  36. listView1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
  37. @Override
  38. public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
  39. Log.d(tag, "listview item " + view.getId() + " has been long clicked");
  40. return false;
  41. }
  42. });
  43.  
  44. }
  45.  
  46. }

如此就成了, 看log, 搜关键字 carlozlog

  1. 11-06 06:56:58.204 12719-12719/? D/carlozlog TextView be long click
  2. 11-06 06:56:59.869 12719-12719/? D/carlozlog TextView be long click
  3. 11-06 06:57:02.115 12719-12719/? D/carlozlog TextView be long click
  4. 11-06 06:57:04.845 12719-12719/? D/carlozlog TextView be long click
  5. 11-06 06:57:06.596 12719-12719/? D/carlozlog TextView be long click
  6. 11-06 06:57:08.755 12719-12719/? D/carlozlog TextView be long click
  7. 11-06 06:57:10.189 12719-12719/? D/carlozlog TextView be long click

ListView item 中TextView 如何获取长按事件的更多相关文章

  1. listview 的onitemlongclick阿和onitemclick冲突,item中还有button的点击事件

    listview里面item有button的,button要设置 android:focusable="false"  ,listview里面如果设置了 onitemlongcli ...

  2. Android中TextView内容过长加省略号

          textview中有个内容过长加省略号的属性,即ellipsize,用法如下: 在xml中 Android:ellipsize = "end"   省略号在结尾 and ...

  3. ListView优化中ViewHolder要不要定义为static静态内部类?

    给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义l ...

  4. VUE长按事件

    PS:在开发中常常会有长按事件的需求,这里我简单的介绍几种长按事件的需求 需求一:长按数字累加或者累减 HTML: <div class="mui-numbox" data- ...

  5. Android自定义长按事件

    Android系统自带了长按事件,setOnLongClickListener即可监听.但是有时候,你不希望用系统的长按事件,比如当希望长按的时间更长一点的时候.这时候就需要自己来定义这个长按事件了. ...

  6. Android ListView 之 SimpleAdapter 二 (包含 item 中按钮监听)

    1    MainActivity.java package com.myadapter; import java.util.ArrayList; import java.util.HashMap; ...

  7. ListView中的item中的Onclick事件的优化

    ListView的Adapter的优化布局载入器的载入次数最典型的使用方法是使用convertView进行优化,让convertView当做布局载入器的载体,也就是.重用 convertView 用以 ...

  8. 关于listView的item失去焦点不能点击 Item中包含Button 导致抢占焦点

    今天发现一个问题.listView的item点击以后进入到下一个页面,下个页面有个返回按钮,直接返回回去以后点击事件不能触发,滑动或者重新打开这个listView,就可以达到原来的效果.后来发现是因为 ...

  9. listview当选中某一个item时设置背景色其他的不变

    listview当选中某一个item时设置背景色其他的不变: 可以使用listview.setOnFoucsChangeListener(listener) ; /** * listview获得焦点和 ...

随机推荐

  1. iOS中SQLite知识点总结2

    数据库(SQLite) 01-多表查询 格式:select 字段1,字段2,... from 表名1,表名2; 别名:select 别名1.字段1 as 字段别名1,别名2.字段2 as 字段别名2, ...

  2. Maven配置 settings.xml 转

    https://my.oschina.net/qjx1208/blog/201085 摘要: 记录settings.xml的配置,理解mirror.repository.profile的关系 本地仓库 ...

  3. seaJs学习笔记之javascript的依赖问题

    之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题.我们将继续就之前javascript中性能问题继续介绍. 先来回顾一下性能问题的 ...

  4. 用CS-Script把Notepad++变身支持智能提示和运行代码的C#集成开发环境

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用CS-Script把Notepad++变身支持智能提示和运行代码的C#集成开发环境.

  5. Zend Framework 2参考Zend\Authentication(HTTP认证适配器)

    Zend Framework 2参考Zend\Authentication(HTTP认证适配器) 介绍 Zend\Authentication\Adapter\Http提供了RFC-2617, Bas ...

  6. 理解position 绝对定位和相对定位

    一.position的三种取值 1.取值 Position :   static /  absolute / fixed / relative static:静态   absolute:绝对定位    ...

  7. 查看数据库中有哪些活动的事务,对应的会话id,执行的语句

    select dbt.database_id, DB_NAME(dbt.database_id) '数据库名', dbt.transaction_id, at.name, at.transaction ...

  8. WCF - 实例与会话

    实例上下文 实例上下文是对服务实例的封装 是WCF管理服务实例生命周期的依托  一个WCF服务通过ServiceHost进行寄宿 开启服务后当接收到请求 则会判断当前是否存在实例上下文 如果存在 则通 ...

  9. Mybaitis配置总结

    在mybatis-config.xml中配置分页插件,插件配置必须放在mapper前面 <plugins> <plugin interceptor="com.rrtong. ...

  10. 蓝灯官网下载,蓝灯最新版下载,Lantern(蓝灯)

    蓝灯官网下载,蓝灯最新版下载,Lantern(蓝灯)下载 >>>>>>>>>>>>>>>>>> ...