convertView setOnTouchListener 监听不到 touch up,move等 事件


convertView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mTouchNoteItemCallback.onTouchEvent(position,v, event);
return false;
}
});

解决办法:
把onTouch 里的返回值 改为true 就 ok了 


一般来说的listview的item 在getView()中监听 convertView 的setOnTouchListener 就可以处理每一个item的手势操作,主要目的是来模仿 iphone的item滑动删除操作。

这里就是推荐的是 利用接口实现回调

这里贴出一个listview 利用接口回调实现 contentview ontouch

---------------------------------

package com.mu.note.ui;

import java.util.List;

import com.mu.note.R;
import com.mu.note.data.NoteBean;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class ListContentAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Context context;
private List noteList;
private TouchNoteItemCallback mTouchNoteItemCallback = new TouchNoteItemCallback() {
@Override
public void onTouchEvent(int pos ,View v, MotionEvent event) {
// TODO Auto-generated method stub
}
};
public ListContentAdapter(Context c) {
context = c;
mInflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
if(noteList == null){
return 0 ;
}else{
return noteList.size();
}
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView != null) {
holder = (ViewHolder) convertView.getTag();
}
if (convertView == null || holder == null) {
// convertview == null
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_content_item, parent, false);
holder.tv_note_title = (TextView) convertView.findViewById(R.id.tv_note_title);
holder.tv_note_content = (TextView) convertView.findViewById(R.id.tv_note_content);
holder.tv_note_time = (TextView) convertView.findViewById(R.id.tv_note_time);
convertView.setTag(holder);
}

holder.tv_note_title.setText(noteList.get(position).note_title + "");
holder.tv_note_content.setText(noteList.get(position).note_content + "");
holder.tv_note_time.setText(noteList.get(position).note_time + "");
convertView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mTouchNoteItemCallback.onTouchEvent(position,v, event);
return true;
}
});
return convertView;
}

class ViewHolder {
TextView tv_note_title;
TextView tv_note_content;
TextView tv_note_time;
}

public void setDateSource(List list) {
noteList = list;
}
public interface TouchNoteItemCallback{
public void onTouchEvent(int pos ,View v, MotionEvent event);
}
public void setTouchNoteItemCallback (TouchNoteItemCallback callback){
mTouchNoteItemCallback = callback;
}
}

---------------------------------

在activity中:

~~~~~~~~
mListAdapter.setTouchNoteItemCallback (new TouchNoteItemCallback() {

@Override
public void onTouchEvent(final int pos, View v, MotionEvent event) {
float downPointX = 0;
float downPointY = 0;
float upPointX = 0;
float upPointY = 0;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
downPointX = event.getX();
downPointY = event.getY();

upPointX = event.getX();
upPointY = event.getY();
}

if (event.getAction() == MotionEvent.ACTION_UP) {
upPointX = event.getX();
upPointY = event.getY();
}

if(Math.abs(upPointX - downPointX) >= 20.0){
AlertDialog.Builder dialog = new AlertDialog.Builder(getApplicationContext())
.setTitle("确定删除吗");
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
mDbManager.deleteOldNote(mNoteList.get(pos));
}
});
dialog.show();
}
}
});
`
~~~~~~~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值