2012-10-03 137 views
4

我有一個ListFragment,我用ContentProvider填充。ListFragment中的手勢檢測

我需要將手勢監聽器附加到它們中的每一個,以便當用戶向右滑動時,該項目將從列表中移除。

以下是我目前在我的ListFragment中的所有內容。

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 

String selection = l.getItemAtPosition(position).toString(); 
Toast.makeText(v.getContext(), selection + "", Toast.LENGTH_LONG).show(); 
Log.d("TodoListFragment", selection+ ""); 

} 

我該如何附加手勢檢測和偵聽?

我已經做了一些研究,發現這段代碼:

class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      // right to left swipe 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Log.d("Swipe", "Left"); 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Log.d("Swipe", "Right"); 
      } 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 

} 

誰能告訴我如何實現它? (不是刪除部分,只是執行)

+1

您不妨審查:https://plus.google.com/113735310430199015092/posts/Fgo1p5uWZLu,因爲這是每位員工的努力實施的'ListView'刷去除的方法。 – CommonsWare

+0

@CommonsWare我一定會嘗試。看起來很有前途:)謝謝! – SooJiLove

回答

3

我在使用下面的答案時遇到了一些問題。

它完美的工作。

class SideIndexGestureListener extends GestureDetector.SimpleOnGestureListener { 
     @Override 
     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 

      Log.d("Scrolled- fragment ", "Scrolling"); 
      return super.onScroll(e1, e2, distanceX, distanceY); 
     } 
    } 




    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     final GestureDetector gestureDetector = new GestureDetector(getActivity(), 
       new SideIndexGestureListener()); 
     View.OnTouchListener gestureListener = new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       return gestureDetector.onTouchEvent(event); 
      } 
     }; 
     getListView().setOnTouchListener(gestureListener); 
     try { 

      adapter = new ArrayAdapter<String>(getActivity(), 
        android.R.layout.simple_list_item_single_choice, elementos); 
      setListAdapter(adapter); 
      getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

     }catch (Exception e){ 

     }