ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-如何处理ListView项目LongPress手势

2019-11-22 13:24:41  阅读:228  来源: 互联网

标签:android-listview android-event android-gesture android


我在事件处理方面有一些小问题,我具有列表视图自定义适配器数据,每行都有日期,标题和价格.当我单击行时,我需要显示详细信息页面,但是当我长按价格,日期或标题时,我需要对列表视图进行排序.我需要在长按上使用手势.请参考下面的代码,我已经尝试过.

自定义适配器视图

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类

public class MyGestureDetector extends SimpleOnGestureListener {

    @Override
    public void onLongPress(MotionEvent e) {

        super.onLongPress(e);
    }



}

帮帮我..谢谢

解决方法:

我认为,无需使用SimpleOnGestureListener.

在您的自定义适配器视图中:

第一,

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);

然后,
只需将eventTitleView,eventDescView和eventDateView的setOnLongClickListener(View.OnLongClickListener l)设置为

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
        }
    });

希望这对您有所帮助.

标签:android-listview,android-event,android-gesture,android
来源: https://codeday.me/bug/20191122/2060103.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有