2012-03-15 4 views
0

以下の例では、OnTouchリスナーまたはonCLickリスナーのいずれかを設定するとすぐにExpandable Listが消えてしまいます。AndroidのExpandableLists、ジェスチャーを実装するonTouch Listenerを設定すると拡張可能Listが消える

私はActivityswipeDetectorクラスを持っている:

public class ActivitySwipeDetector implements View.OnTouchListener { 

public static enum Action { 
    LR, // Left to Right 
    RL, // Right to Left 
    TB, // Top to bottom 
    BT, // Bottom to Top 
    None // when no action was detected 
} 


private static final String logTag = "SwipeDetector"; 
private static final int MIN_DISTANCE = 100; 
private float downX, downY, upX, upY; 
private Action mSwipeDetected = Action.None; 


public boolean swipeDetected(){ 
    return mSwipeDetected != Action.None; 
} 

public Action getAction(){ 
    return mSwipeDetected; 
} 


public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: { 
     downX = event.getX(); 
     downY = event.getY(); 
     mSwipeDetected = Action.None; 
     return false; // allow other events like Click to be processed 
    } 
    case MotionEvent.ACTION_UP: { 
     upX = event.getX(); 
     upY = event.getY(); 

     float deltaX = downX - upX; 
     float deltaY = downY - upY; 

     // horizontal swipe detection 
       if (Math.abs(deltaX) > MIN_DISTANCE) { 
        // left or right 
        if (deltaX < 0) { 
         Log.i(logTag, "Swipe Left to Right"); 
         mSwipeDetected = Action.LR; 
         return false; 
        } 
        if (deltaX > 0) { 
         Log.i(logTag, "Swipe Right to Left"); 
         mSwipeDetected = Action.RL; 
         return false; 
        } 
       } else 

       // vertical swipe detection 
       if (Math.abs(deltaY) > MIN_DISTANCE) { 
        // top or down 
        if (deltaY < 0) { 
         Log.i(logTag, "Swipe Top to Bottom"); 
         mSwipeDetected = Action.TB; 
         return false; 
        } 
        if (deltaY > 0) { 
         Log.i(logTag, "Swipe Bottom to Top"); 
         mSwipeDetected = Action.BT; 
         return false; 
        } 
       } 
       return false; 
    } 
    } 
    return false; 
} 

}

そして、私のメインクラス内で私はのonCreate METHOD-の先頭に以下を追加しますが、最初の2行は拡張可能なリスト消えるを行います。

final ActivitySwipeDetector swipeDetector = new ActivitySwipeDetector(); 
     list.setOnTouchListener(swipeDetector); 

     list.setOnItemClickListener(new OnItemClickListener() { 

       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         if (swipeDetector.swipeDetected()){ 
          // do the onSwipe action 
         } else { 
          // do the onItemClick action 
         } 
        } 
           }); 
      list.setOnItemLongClickListener(new OnItemLongClickListener() { 
       public boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) { 
        if (swipeDetector.swipeDetected()){ 
         // do the onSwipe action 
         return true; 
        } else { 
         // do the onItemLongClick action 
         return false; 
        } 
       } 
      }); 

"list"はlist = getExpandableListView()として定義されます。

だから1)私が間違って何をやっている拡張可能なリスト消える

2を作ること)私はonGroupClickリスナーとonChildClickリスナーを使用する必要がありますか。その場合は、どこに追加するかをアドバイスしてください。

3)「スワイプアクションを実行する」と「OnItemClickアクションを実行する」と表示されている箇所は何ですか?

私は左から右に使用するために午前は

右から左のリストに項目を拡張するためにスワイプ戻ってスワイプし、私はすでにので、私そのためのコードを持っているボタンを持っています私はそれをスワイプと置き換えるべきですか?

ご協力いただければ幸いです。

Z

答えて

1

私はリストを設定していた前にエラー

私はメインクラスでリスナーを追加しましたが見つかり= getExpandableListView();

後でリスナーを挿入したときに正常に機能しました。

関連する問題