2 woaixuexi1209 woaixuexi1209 于 2015.05.26 13:22 提问

fragment的滑动删除 反应很顿

我在listview的getview里面写了滑动删除,可是反应很顿,老是滑不出来,
体验效果不好,网上看到的都是在activity中用的,我试了,当切换fragment的时候,还是存在的
大家有好的方法吗?/??谢谢了

// 为每一个view项设置触控监听
convertView.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                final ListViewHolder holder = (ListViewHolder) v.getTag();
                // 当按下时处理
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    // //设置背景为选中状态
                    // v.setBackgroundResource(R.drawable.mm_listitem_pressed);
                    // 获取按下时的x轴坐标
                    x = event.getX();
                    // Toast.makeText(mContext, x+"", 1).show();
                    // 判断之前是否出现了删除按钮如果存在就隐藏
                    if (curDel_btn != null) {
                        // if(curDel_btn.getVisibility() == View.VISIBLE){
                        curDel_btn.setVisibility(View.GONE);
                        return true;
                        // }
                    }

                } else if (event.getAction() == MotionEvent.ACTION_UP) {// 松开处理
                    // 设置背景为未选中正常状态
                    // v.setBackgroundResource(R.drawable.mm_listitem_simple);
                    // 获取松开时的x坐标
                    ux = event.getX();
                    // 怎么没用松开的坐标呢
                    // 判断当前项中按钮控件不为空时
                    if (holder.del != null) {

                        // 按下和松开绝对值差当大于20时显示删除按钮,否则不显示

                        if (Math.abs(x - ux) > 20) {
                            holder.del.setVisibility(View.VISIBLE);
                            curDel_btn = holder.del;
                            return true;
                        }
                    }
                } else if (event.getAction() == MotionEvent.ACTION_MOVE) {// 当滑动时背景为选中状态
                    return true;
                    // v.setBackgroundResource(R.drawable.mm_listitem_pressed);

                } else {// 其他模式
                    // 设置背景为未选中正常状态
                    // v.setBackgroundResource(R.drawable.mm_listitem_simple);

                }

                return true;
            }

        });

2个回答

bdmh
bdmh   Ds   Rxr 2015.05.26 13:26

你可以考虑用nineoldandroids-2.4.0.jar或者网上有人实现了,你看看他们代码如何写的,比如
http://blog.csdn.net/xiaanming/article/details/17539199

sirnuo
sirnuo   2015.05.26 14:24

没必要每次都创建 OnTouchListener,只要创建一个公共的OnTouchListener就可以。
想要知道是哪个View,只要给convertView设置tag;convertView.setTag(position);

滑动删除的功能,应该在 ListView上面实现,由ListView监听TouchEvent,不需要给每个item添加OnTouchListener。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!