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();
}
}
});
`
~~~~~~~~