2016-12-28 2 views
0

확장 가능한 목록을 만들고 슬라이더처럼 동작하는 gesturedetector를 설정했습니다. (슬라이더를 움직일 때마다 표시하고 숨 깁니다.)expandableListView에서 onTouchEventListteners를 적절하게 관리합니다.

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 알려주기 :

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

      return gestureDetectorOfExpListView.onTouchEvent(motionEvent); 

     } 


    });enter code here 

을하지만 난이 시도 할 때 긴 터치 후 로직을 구현하기 위해에 OnItemLongListener을 설정 ExpandableList 하위 노드 :

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 

... 그리고 난 다음 라인을 삭제할 때 내가

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

를 설정 곳은 일이나를 어쩌려 구`t는 .... OnItemLongClickListener 제대로 작동! 제스처 동작과 onLongTouches을 구현하는 방법을 이해할 수있게 도와주세요. 도움을 주셔서 감사합니다.

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

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

     } 


    });enter code here 
:

답변

0

그래서 난 우아한 해결책을 발견
관련 문제