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

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

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

思考ing

ListView几大要素

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

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

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

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

定义MyAdapter类:

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; import java.util.List;
import java.util.Map; /**
* Created by root on 15-11-6.
*/
public class MyAdapter extends BaseAdapter {
LayoutInflater mLayoutInflater;
List<Map<String, Object>> mData;
public static final String KEY_NAME = "name"; // Context context, MyAdapter
public MyAdapter(Context context, List<Map<String, Object>> data) {
mLayoutInflater = LayoutInflater.from(context);
mData = data;
} @Override
public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.listview_item_text, null);
TextView tv = (TextView) convertView.findViewById(R.id.text1);
tv.setText(mData.get(position).get(KEY_NAME).toString());
tv.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.d("carlozlog", "TextView be long click");
return true;
}
}); } return convertView;
} @Override
public int getCount() {
return mData.size();
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
return 0;
}
}

此处用到一个ListViiew的 item 模板

listview_item_text.xml

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

使用adaper:  MainActivity.java 中

public class MainActivity extends AppCompatActivity {
// view
private ListView listView1;
// data
Context mContext;
//SimpleAdapter mSimpleAdapter;
MyAdapter mMyAdapter;
String tag = "carlozlog"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = getApplicationContext(); Map<String, Object> map1 = new HashMap<>();
map1.put(MyAdapter.KEY_NAME, "Hello World");
Map<String, Object> map2 = new HashMap<>();
map2.put(MyAdapter.KEY_NAME, "Lu Xun");
Map<String, Object> map3 = new HashMap<>();
map3.put(MyAdapter.KEY_NAME, "Zhu De");
Map<String, Object> map4 = new HashMap<>();
map4.put(MyAdapter.KEY_NAME, "Lao Mao"); List<Map<String, Object>> listData = new ArrayList<>();
listData.add(map1);
listData.add(map2);
listData.add(map3);
listData.add(map4); //mSimpleAdapter = new SimpleAdapter(mContext, listData, R.layout.listview_item_text, new String[]{"name"}, new int[]{R.id.text1}); mMyAdapter = new MyAdapter(mContext, listData);
listView1 = (ListView)findViewById(R.id.listview1);
listView1.setAdapter(mMyAdapter);
listView1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Log.d(tag, "listview item " + view.getId() + " has been long clicked");
return false;
}
}); } }

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

11-06 06:56:58.204  12719-12719/? D/carlozlog﹕ TextView be long click
11-06 06:56:59.869 12719-12719/? D/carlozlog﹕ TextView be long click
11-06 06:57:02.115 12719-12719/? D/carlozlog﹕ TextView be long click
11-06 06:57:04.845 12719-12719/? D/carlozlog﹕ TextView be long click
11-06 06:57:06.596 12719-12719/? D/carlozlog﹕ TextView be long click
11-06 06:57:08.755 12719-12719/? D/carlozlog﹕ TextView be long click
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. nyoj 55 懒省事的小明【优先队列】

    懒省事的小明 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述       小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种 ...

  2. mongodb数据库连接池(java版)

    mongodb数据库接口的设计 package storm.db; import java.util.ArrayList; import com.mongodb.DB; import com.mong ...

  3. linux安装apache软件的过程

    参考官方安装指导:http://httpd.apache.org/docs/2.4/install.html 1.下载依赖包 apr/apr-util/pcre 2.解压依赖包 3.安装apr 进入安 ...

  4. C的printf与scanf的用法

    之前没学过C语言,只学过C++,所以就来自学下C语言了,其实个人认为C与C++的区别很小,基本上就是printf与scanf这点输出和输入的区别了,如果还有什么区别的话那就是要包含的头文件是不同的.比 ...

  5. ios9中 UIStackView的使用

    ios9中 UIStackView的使用 by 伍雪颖 UIStackView能够垂直或水平排布多个subview, 自己主动为每一个subview创建和加入Auto Layout constrain ...

  6. 详解Android动画之Tween Animation

    前面讲了动画中的Frame动画,今天就来详细讲解一下Tween动画的使用. 同样,在开始实例演示之前,先引用官方文档中的一段话: Tween动画是操作某个控件让其展现出旋转.渐变.移动.缩放的这么一种 ...

  7. careercup-链表 2.4

    2.4 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前. 思路:将小于的结点还是保存在原来的链表中,将大于等于x的结点加入一个新的链表,最后将这两个链表链接起 ...

  8. PureMVC(JS版)源码解析(五):SimpleCommand类

          之前我们对PureMVC中涉及到观察者模式的三个基本类(Notification/Observer/Notifier)进行了分析,接下来将对PureMVC源码中的其他类进行分析,首先我们讲 ...

  9. BeanUtils使用概要

    BeanUtils是apache提供的的一个工具类,在很多地方我们都要用到这个类.下面说说这个类的简单用法. 相关的使用细节已经在代码的注释中说明了. @Test public void test5( ...

  10. WTL 自绘 进度条Progressbar

    WTL 绘制的进度条,逻辑清晰明了,代码函数清晰易懂:基本思路就是 首先绘制 进度条背景图,然后根据动态进度不断重绘前景进度条,绘制操作在OnPaint函数里画.该类可以直接用于项目中. 使用示例: ...