2016-12-28 1 views
0

Я создал расширяемый список и установил gesturedetector, который действует как Slider (он показывает и скрывает каждый раз, когда я на него бросаю).Невозможно правильно управлять списком onTouchEventListteners в expandableListView

expListListener= new GestureDetector.SimpleOnGestureListener(){ 

    @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

       expandableListView.invalidateViews(); 

       Thread closeSliderThread = new Thread(new closingSlider()); 
       Thread openingSliderThread = new Thread(new openingSlider()); 

        if (e1.getX() - e2.getX() < 0 && Math.abs(e2.getX() - e1.getX()) > difference) { 
         closeSliderThread.start();     
         for (int i = 0; i < expandableListView.getCount(); i++)    expandableListView.collapseGroup(i); 

         return true; 
        } 


        if (e2.getX() - e1.getX() > 0 
          && Math.abs(e1.getX() - e2.getX()) > difference) 
        { 

         openingSliderThread.start();                
         return true; 
        } 
        return false; 

      } 



      @Override 
      public boolean onDown(MotionEvent e) { 

       return true; 
      } 

      class closingSlider implements Runnable{ 
       @Override 
       public void run() { 
        rightPartLL.post(new Runnable() { 
         @Override 
         public void run() { 
          synchronized (closingSlider.class) { 
           rightPartLL.startAnimation(hide_slider); 
          } 
         } 
        }); 

       } 
      } 
      class openingSlider implements Runnable{ 
       @Override 
       public void run() { 
        rightPartLL.post(new Runnable() { 
         @Override 
         public void run() { 
          synchronized (openingSlider.class) { 
           rightPartLL.startAnimation(show_slider); 
          } 
         } 
        }); 

       } 
      } 

затем

gestureDetectorOfExpListView = new GestureDetector(activity,expListListener); 

здесь я сказать expanableList слушать мои Fling действия:

expandableListView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 

      return gestureDetectorOfExpListView.onTouchEvent(motionEvent); 

     } 


    });enter code here 

Но когда я попытался установить OnItemLongListener для того, чтобы реализовать логику после долгого прикосновения ребенок из расширяемого списка:

expandableListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) { 
      if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
       int groupPosition = ExpandableListView.getPackedPositionGroup(id); 
       int childPosition = ExpandableListView.getPackedPositionChild(id); 

       Toast.makeText(activity,"group: "+groupPosition +" child:"+childPosition,5000).show(); 

       // Return true as we are handling the event. 
       return true; 
      } 
      return false; 
     } 
    }); 
enter code here 

... и это Doesn `T work.But, когда я удалить, а затем строки, в которых я установить

OnTouchEvent to expandableListView which return return gestureDetectorOfExpListView.onTouchEvent(motionEvent); 

.... OnItemLongClickListener работает должным образом! Помогите мне разобраться, как реализовать действия обоих жестов и onLongTouches. Спасибо за любую помощь.

ответ

0

Так я нашел элегантное решение:

xpandableListView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 

      return gestureDetectorOfExpListView.onTouchEvent(motionEvent) | expandableListView.onTouchEvent(motionEvent); 

     } 


    });enter code here