在Android的列表视图中滑动时显示删除按钮

前端之家收集整理的这篇文章主要介绍了在Android的列表视图中滑动时显示删除按钮前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
扩展另一个Stackoverflow问题,我已经实现了一些手势检测代码,以便我可以检测我的listview(在FrameLayout中)中的行何时被刷过.我跟着Damian的问题/答案,关于如何从适配器获取单独的行/视图. @H_502_2@ How to get location (on screen) of row in listview

我在我的onFling中有代码获取行的视图,并尝试在我的xml布局中设置为不可见的删除按钮可见.但是,这不会发生.我想知道如何在刷卡的列表视图中显示按钮?

  1. class MyGestureDetector extends SimpleOnGestureListener {
  2. @Override
  3. public boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY) {
  4. try {
  5.  
  6. if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
  7. && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
  8. int itemId = MyClass.this.lv.pointToPosition(
  9. (int) e1.getX(),(int) e1.getY());
  10.  
  11. Log.v("item id",String.valueOf(itemId));
  12. View v = MyClass.this.adapter
  13. .getViewOnScreen(itemId);
  14. Button delete = (Button) v.findViewById(R.id.button_delete);
  15.  
  16. delete.setVisibility(View.VISIBLE);
  17. //MyClass.this.adapter.notifyDataSetChanged();
  18.  
  19.  
  20. }
  21.  
  22. } catch (Exception e) {
  23. // nothing
  24. }
  25. return false;
  26. }
  27. }

我的列表适配器代码与引用的问题相同.

编辑:我尝试在列表视图上使用getChildAt()来获取行的视图,当有一个或更少的项目时,这可以工作,但是当返回错误的视图时,错误删除按钮变为可见.

编辑2:我使用问题here上的答案让它工作:

解决方法

我曾经在我的应用程序中实现了类似的功能.我这样做的方式:
  1. public class MyGestureDetector extends SimpleOnGestureListener {
  2. private ListView list;
  3.  
  4. public MyGestureDetector(ListView list) {
  5. this.list = list;
  6. }
  7.  
  8. //CONDITIONS ARE TYPICALLY VELOCITY OR DISTANCE
  9. @Override
  10. public boolean onFling(MotionEvent e1,float velocityY) {
  11. if (INSERT_CONDITIONS_HERE)
  12. if (showDeleteButton(e1))
  13. return true;
  14. return super.onFling(e1,e2,velocityX,velocityY);
  15. }
  16.  
  17. private boolean showDeleteButton(MotionEvent e1) {
  18. int pos = list.pointToPosition((int)e1.getX(),(int)e1.getY());
  19. return showDeleteButton(pos);
  20. }
  21.  
  22. private boolean showDeleteButton(int pos) {
  23. View child = list.getChildAt(pos);
  24. if (child != null){
  25. Button delete = (Button) child.findViewById(R.id.delete_button_id);
  26. if (delete != null)
  27. if (delete.getVisibility() == View.INVISIBLE)
  28. delete.setVisibility(View.VISIBLE);
  29. else
  30. delete.setVisibility(View.INVISIBLE);
  31. return true;
  32. }
  33. return false;
  34. }
  35. }

这对我有用,希望你能让它发挥作用,或者它至少会给你一些暗示.

猜你在找的Android相关文章