最近需要给ListView写一个监听器,在按住ListView中Item不松手的时候,改变Item的样式,使得被按住的Item背景色为灰,并显示跑马灯效果。因为需要具体到每个Item,所以首先想到了OnItemClickListener。但是稍微想想就知道这样是不行的,OnItemClickListener监听的是点击某个Item的动作,点击包括按下和松开两个部分,所以不用到达想要的效果。
于是想到用OnTouchListener监听按下的动作。但是,你知道我是会说但是的。OnTouchListener针对的是整个ListView,并没有提供被点击Item的位置参数,所以这样并不能达到改变单个Item显示效果的目的。顿时有种想掀桌的冲动,但是实验室的桌子我真的掀不动。于是去StackOverflow搜索,开始搜索不得法,没有找到想要的东西。难道老外们都不屑于问这种小白问题吗?不可能,我明明见过有人问Hello world为啥跑不出来之类的问题来着。几经变换关键词之后找到了一个和我问题很相似的提问。大概意思就是说 :“哥们儿,我原来遇到的问题和你现在遇到的这个问题贼拉想,唉呀妈呀,我告诉你咋整呗。你就自个儿写一个BaseAdapter子类,然后再getView()方法里加一个OnTouchListener就欧了,缸缸地好使。”之前要写跑马灯效果,所以自定义的适配器已经写过了,按照提问里说的办法加了OnTouchListener。
package org.cdpsn.client.widget.wheel;
import java.util.List;
import java.util.Map;
import org.cdpsn.client.R;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class ListItemAdapter extends BaseAdapter
{
private LayoutInflater inflater;
private List<Map<String, Object>> items;
private static int index = 0;
public ListItemAdapter(Context context, List&