How to handle ListView Item LongPress gesture

android, android-event, android-gesture, android-listview

Solution

I think, there's no need to use `SimpleOnGestureListener`.

In your Custom Adapter View:

First,

eventTitleView.setFocusable(false); 
eventTitleView.setFocusableInTouchMode(false);
eventTitleView.setLongClickable(true);

eventDescView.setFocusable(false); 
eventDescView.setFocusableInTouchMode(false);
eventDescView.setLongClickable(true);

eventDateView.setFocusable(false); 
eventDateView.setFocusableInTouchMode(false);
eventDateView.setLongClickable(true);

Then, just set `setOnLongClickListener (View.OnLongClickListener l)` on `eventTitleView`, `eventDescView` and `eventDateView` as,

eventTitleView.setOnItemLongClickListener(new OnItemLongClickListener() {
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            //do your sorting stuff here
        }
    });

eventDescView.setOnItemLongClickListener(new OnItemLongClickListener() {
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            //do your sorting stuff here
        }
    });

eventDateView.setOnItemLongClickListener(new OnItemLongClickListener() {
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            //do your sorting stuff here
        }
    });

Hope this helps you.

Problem

i have small issues in event handling , i have List view custom adapter data , each row having date , title , price . when i click on row i need to display details page but when i long press on price , date or title i need to sort the list view. i need to use gesture for on Long Press. please refer below code what i have tried. Custom Adapter View ``` public EventAdapterView(Context context, List<EventUtil> eventList) { this.mContext = context; this.mEventUtil = eventList; mLayoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); imageLoader = new DrawableManager(); } @SuppressLint("DefaultLocale") @SuppressWarnings("deprecation") @Override public View getView(int position, View convertView, ViewGroup parent) { mView = convertView; EventUtil eventUtil = mEventUtil.get(position); mView = mLayoutInflater.inflate(R.layout.row_event_adapter, null); TextView eventTitleView = (TextView) mView .findViewById(R.id.list_view_event_title); TextView eventDescView = (TextView) mView .findViewById(R.id.list_view_event_location); TextView eventDateView = (TextView) mView .findViewById(R.id.list_view_event_price); // final MyGestureDetector myGestureDetector= new MyGestureDetector(); // new ImageFeach().execute(mEventUtil.getEvent_Image_Url()); eventTitleView.setText(eventUtil.getEvent_Title()); // event title sorting eventTitleView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { new MyGestureDetector() { public void onLongPress(MotionEvent event1) { //if (event1.getAction() == MotionEvent.ACTION_DOWN) { Collections.sort(mEventUtil, new Comparator<EventUtil>() { @Override public int compare(EventUtil obje1, EventUtil obje2) { return obje1 .getEvent_Title() .compareTo( obje2.getEvent_Title()); } }); notifyDataSetChanged(); //} }; }.onLongPress(event); return true; } }); // event location sorting eventDescView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { new MyGestureDetector() { public void onLongPress(MotionEvent event1) { //if (event1.getAction() == MotionEvent.ACTION_DOWN) { Collections.sort(mEventUtil, new Comparator<EventUtil>() { @Override public int compare(EventUtil event1, EventUtil event2) { return event1 .getEvent_location() .compareTo( event2.getEvent_location()); } }); notifyDataSetChanged(); //} }; }.onLongPress(event); return true; } }); // event price sorting eventDateView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { new MyGestureDetector() { public void onLongPress(MotionEvent event1) { // if (event1.getAction() == MotionEvent.ACTION_DOWN) { Collections.sort(mEventUtil, new Comparator<EventUtil>() { @Override public int compare(EventUtil event1, EventUtil event2) { return event1 .getEvent_Price() .compareTo( event2.getEvent_Price()); } }); notifyDataSetChanged(); //} }; }.onLongPress(event); return true; } }); // event date sorting ImageView dateImageView = (ImageView) mView .findViewById(R.id.list_view_event_date); dateImageView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { new MyGestureDetector() { public void onLongPress(MotionEvent event1) { //if (event1.getAction() == MotionEvent.ACTION_DOWN) { Collections.sort(mEventUtil, new Comparator<EventUtil>() { @Override public int compare(EventUtil event1, EventUtil event2) { return event2 .getEvent_Date() .compareTo( event1.getEvent_Date()); } }); notifyDataSetChanged(); //} }; }.onLongPress(event); return true; } }); ``` MyGestureDetector Class ``` public class MyGestureDetector extends SimpleOnGestureListener { @Override public void onLongPress(MotionEvent e) { super.onLongPress(e); } } ``` Help Me.. Thanks

Original source