当我在我的listview中添加ontouchListener时,onListItemClick不工作。
我想在列表视图中使用OnTouchListener和onListItemClick来实现单击,因为我使用来自onListItemClick的position来创建新的activity,并使用ontouch来实现快速滑动手势。
public class FRAG1 extends ListFragment {
private static final String KEY_VIDEO_PATH = "AAA-1";
private static final String KEY_VIDEO_TITLE = "AAA-2";
private static final String KEY_VIDEO_ARTIST = "AAA-3";
private static final String KEY_VIDEO_DURATION = "AAA-4";
private static final String KEY_VIDEO_ID = "AAA-5";
private static final Uri sourceUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
private static final String[] projection = { MediaStore.Video.Media._ID,
MediaStore.Video.Media.DATA, MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.DISPLAY_NAME, MediaStore.Video.Media.ARTIST,
MediaStore.Video.Media.DURATION };
private static final String orderBy = MediaStore.Video.Media.DATE_ADDED;
/* THE DESIRED COLUMNS TO BE BOUND */
private static final String[] from = { MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.ARTIST, MediaStore.Video.Media.DURATION };
/* THE XML DEFINED VIEWS WHICH THE DATA WILL BE BOUND TO */
private static final int[] to = { R.id.list_Title, R.id.list_Artist,
R.id.list_Duration };
private static Cursor videoCursor;
private static int videoPathColumnIndex;
private static int videoTitleColumnIndex;
private static int videoArtistColumnIndex;
private static int videoDurationColumnIndex;
private static int videoIdColumnIndex;
private static String videoPath;
private static String videoTitle;
private static String videoArtist;
private static int videoDuration;
private static int videoId;
/* GET THE CONTEXT OF LISTFRAGMENT FROM HOMEPAGE ACTIVITY */
Context context;
/* TO LUNCH 2nd CLASS AND PUT MEDIA INFO INTO */
private static Intent vIntent;
/* MY CUSTOM ADAPTER */
private static MyCustomSimpleCursorAdapter adapter;
/* GESTUREDETOR FOR COMPATIBILITY */
GestureDetectorCompat detector;
/* MY LISTVIEW */
ListView lv;
/* CUSTOM TYPE INFLATION IF NEED TO ADD MORE VIEW IN LISTVIEW XML LAYOUT */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.frag_this_week, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
context = getActivity();
// CREATE CURSOR THAT WILL HOLD ALL VALUE
videoCursor = context.getContentResolver().query(sourceUri, projection,
null, null, orderBy);
// CREATE THE ADAPTER USING THE CURSOR POINTING TO THE
// DESIRED DATA AS WELL AS THE LAYOUT INFORMATION
adapter = new MyCustomSimpleCursorAdapter(context,
R.layout.list_row_items, videoCursor, from, to);
setListAdapter(adapter);
// GET THE INSTANCE OF LISTVIEW FOR THE SWIPEVIEW PURPOSE
lv = getListView();
detector = new GestureDetectorCompat(context,
new MyOnSwipeTouchListener());
lv.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(context, "true", Toast.LENGTH_SHORT).show();
System.out.println("true");
return detector.onTouchEvent(event);
}
});
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// MOVE TO CLICK POSITION
if (videoCursor.moveToPosition(position)) {
// GET THE COLUMN INDEX OF THE FILEPATH, TITLE, ARTIST,
// DURATION
videoPathColumnIndex = videoCursor
.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
videoTitleColumnIndex = videoCursor
.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE);
videoArtistColumnIndex = videoCursor
.getColumnIndexOrThrow(MediaStore.Video.Media.ARTIST);
videoDurationColumnIndex = videoCursor
.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
videoIdColumnIndex = videoCursor
.getColumnIndexOrThrow(MediaStore.Video.Media._ID);
// LIST THE DATA OF THE COLUMNINDEX OF THE VIDEOCURSOR
// POSITION
videoPath = videoCursor.getString(videoPathColumnIndex);
videoTitle = videoCursor.getString(videoTitleColumnIndex);
videoArtist = videoCursor.getString(videoArtistColumnIndex);
videoDuration = videoCursor
.getInt(videoDurationColumnIndex);
videoId = videoCursor.getInt(videoIdColumnIndex);
// START THE NEW INTENT ACTIVITY AND PASS SOME MEDIA INFO
vIntent = new Intent(getActivity(), Play.class);
vIntent.putExtra(KEY_VIDEO_PATH, videoPath);
vIntent.putExtra(KEY_VIDEO_TITLE, videoTitle);
vIntent.putExtra(KEY_VIDEO_ARTIST, videoArtist);
vIntent.putExtra(KEY_VIDEO_DURATION, videoDuration);
vIntent.putExtra(KEY_VIDEO_ID, videoId);
startActivity(vIntent);
}
}
});
}
/** NESTED CLASS FOR MY CUSTOM SWIPE TOUCH LISTENER */
public class MyOnSwipeTouchListener extends
GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent event) {
return true;
}
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
float velocityX, float velocityY) {
Toast.makeText(context, "on fling", Toast.LENGTH_SHORT).show();
return true;
}
}
}这是我的自定义光标适配器
/* CUSTOM ADAPTER FOR TABTHISWEEK */
public class MyCustomSimpleCursorAdapter extends SimpleCursorAdapter {
private static int layout;
private static LayoutInflater inflater;
private MyViewHolder holder;
public MyCustomSimpleCursorAdapter(Context context, int layout,
Cursor cursor, String[] from, int[] to) {
super(context, layout, cursor, from, to, 0);
MyCustomSimpleCursorAdapter.layout = layout;
MyCustomSimpleCursorAdapter.inflater = LayoutInflater.from(context);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(layout, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
super.bindView(view, context, cursor);
holder = (MyViewHolder) view.getTag();
if (holder == null) {
holder = new MyViewHolder();
holder.titleHolder = (TextView) view.findViewById(R.id.list_Title);
holder.artistHolder = (TextView) view
.findViewById(R.id.list_Artist);
holder.durationHolder = (TextView) view
.findViewById(R.id.list_Duration);
holder.imageHolder = (ImageView) view.findViewById(R.id.list_Image);
holder.playHolder = (ImageButton) view.findViewById(R.id.list_Play);
view.setTag(holder);
}
/*
* GET THE COLUMN INDEX OF TITLE, ARTIST, DURATION AND
* THE ROWID OF THE VIDEO IMAGE THUMBNAIL PER LOOP
*/
holder.titleIndex = cursor
.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE);
holder.artistIndex = cursor
.getColumnIndexOrThrow(MediaStore.Video.Media.ARTIST);
holder.durationIndex = cursor
.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
holder.imageIndex = cursor.getInt(cursor
.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
/* SET THE TITLE BUT IF NULL SET TO DEFAULT FROM RESOURCES */
try {
holder.titleHolder.setText(cursor.getString(holder.titleIndex));
} catch (Exception e) {
e.printStackTrace();
Log.d("XXXXXX" + e.getMessage(), e.getMessage());
holder.titleHolder.setText(context.getResources().getString(
R.string.list_view_default_text_title));
}
/* SET THE ARTIST BUT IF NULL SET TO DEFAULT FROM RESOURCES */
try {
holder.artistHolder.setText(cursor.getString(holder.artistIndex));
} catch (Exception e) {
e.printStackTrace();
Log.d("XXXXXX" + e.getMessage(), e.getMessage());
holder.artistHolder.setText(context.getResources().getString(
R.string.list_view_default_text_artist));
}
/* SET THE TIME DURATION IF NULL SET TO DEFAULT */
try {
holder.milliseconds = Integer.parseInt(cursor
.getString(holder.durationIndex));
holder.seconds = holder.milliseconds / 1000;
holder.minutes = holder.seconds / 60;
holder.seconds = holder.seconds % 60;
holder.minutes = holder.minutes % 60;
holder.durationHolder.setText(String.format("%2d:%02d",
holder.minutes, holder.seconds));
} catch (Exception e) {
e.printStackTrace();
Log.d("XXXXXX" + e.getMessage(), e.getMessage());
holder.durationHolder.setText(context.getResources().getString(
R.string.list_view_default_text_duration));
}
/* SET THE BITMAP IMAGE FOR THE IMAGEVIEW */
try {
holder.options = new BitmapFactory.Options();
holder.options.inDither = false;
holder.options.inPreferredConfig = Bitmap.Config.ARGB_8888;
holder.bitmapVidThumb = MediaStore.Video.Thumbnails.getThumbnail(
context.getContentResolver(), holder.imageIndex,
MediaStore.Video.Thumbnails.MICRO_KIND, null);
holder.imageHolder.setImageBitmap(holder.bitmapVidThumb);
} catch (Exception e) {
e.printStackTrace();
Log.d("XXXXXX" + e.getMessage(), e.getMessage());
holder.imageHolder.setBackgroundDrawable(context.getResources()
.getDrawable(R.drawable.default_img));
}
/* SET DEFAULT VALUE IF TITLE IS NULL */
if (holder.titleHolder.getText().toString().equals("")) {
holder.titleHolder.setText(context.getResources().getString(
R.string.list_view_default_text_title));
}
/* SET DEFAULT VALUE IF ARTIST IS NULL */
if (holder.artistHolder.getText().toString().equals("")) {
holder.artistHolder.setText(context.getResources().getString(
R.string.list_view_default_text_artist));
}
}
/* MY NESTED VIEW HOLDER CLASS */
static class MyViewHolder {
BitmapFactory.Options options;
Bitmap bitmapVidThumb;
ImageButton playHolder;
ImageView imageHolder;
TextView titleHolder;
TextView artistHolder;
TextView durationHolder;
Integer milliseconds;
Integer seconds;
Integer minutes;
int imageIndex;
int titleIndex;
int artistIndex;
int durationIndex;
int durationTemp;
}
}有关我的问题的详细信息,请更新我的代码
发布于 2013-12-26 17:51:00
你的问题并不是你在想什么,你需要重写
onListItemClick的ListView类的setOnItemClickListener(新的OnItemCLickListener)方法,并将它与setOnTouchListener一起使用,你会得到完美的结果,她的示例代码展示了这两个方法的作用。
ListView list = new ListView(MainActivity.this);
list= (ListView) findViewById(R.id.list);
String [] men = { "RJ" ,"DJ ", " Snoop " , " Doogy " ," Doggg" , "2 pac"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_expandable_list_item_1,men);
list.setAdapter(adapter);
list.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
System.out.println("hello");
return false;
}
});
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
System.out.println(arg2);
}
}); 让我知道这是否是你要找的
https://stackoverflow.com/questions/20781734
复制相似问题