2017-02-17 3 views
0

にonClickListener妨げている私は、私は次のようにのonClickとonTouchイベントを登録しようとしています onTouchListenerは「Oneplus X」と小米科技ミデバイス

<View 
    android:id="@+id/action_edit" 
    android:layout_width="24dp" 
    android:layout_height="24dp" 
    android:background="@drawable/ic_edit_black_24dp" 
    android:layout_marginEnd="@dimen/text_margin" 
    android:layout_marginStart="@dimen/text_margin" 
    android:layout_centerVertical="true" 
    android:layout_alignParentEnd="true"/> 

ような単純なビューが定義されています。

mEditButton = view.findViewById(R.id.action_edit); 
    mEditButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (null != mListener) { 
       // Notify the active callbacks interface (the activity, if the 
       // fragment is attached to one) that an item has been selected. 
       mListener.onListFragmentInteraction_Item_Edit_Button_Clicked(mItem); 
      } 
     } 
    }); 

    mEditButton.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
       ith.startDrag(EditTextViewHolder.this); 
      } 
      return false; 
     } 
    }); 

これは、エミュレータ、レノボA6000 +(ロリポップ)で正常に動作して、モトXは(マシュマロ)を再生します。しかし、私がでアプリを実行しようとすると、Oneplus X(マシュマロ)とXiaomi Mi onClickListenerデバイスが起動されていません。 onTouchListenerを削除すると、onClickListenerが機能しています。私が '偽'を返しても、onTouchListenerがどのようにイベントを消費しているか。

ビューには次の属性を含めるようにしましたが、運はありませんでした。

android:clickable="true" 
android:focusable="true" 
android:focusableInTouchMode="true" 

私はボタンのImageButtonが、運とビューを交換してみました。上記のデバイスで何らかのバグですか、私はここで何か間違っていますか?私は他のデバイスやエミュレータではどうやって動作しているのか理解できませんが、そのデバイスでは動作しません。

この問題を修正する方法がない場合、誰かがクリックを検出してスワイプジェスチャを検出するためにonTouchListenerだけを使用するような代替方法を提案できますか?

私はSOに関連するすべての質問を試みましたが、いずれも私のために働いていなかったので、新しい質問を投稿しています。

答えて

0

あなたは、このようにonTouchListenerとクリックイベントを検出することができます。

mEditButton.setOnTouchListener(new View.OnTouchListener() { 
      private static final int MAX_CLICK_DURATION = 200; 
      private long startClickTime; 

      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 

       switch (motionEvent.getAction()) { 
        case MotionEvent.ACTION_DOWN: { 
         startClickTime = Calendar.getInstance().getTimeInMillis(); 
         break; 
        } 
        case MotionEvent.ACTION_UP: { 
         long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime; 
         if (clickDuration < MAX_CLICK_DURATION) { 
          //click event has occurred 
         } 
        } 
       }  
       return true; 
      } 
}); 
0

あなただけonTouchイベントを使用する必要があります。

タップを区別するために、GestureDetectorを使用できます。

あなたはこのような何かを試みることができる:あなたはより多くの情報とAndroid開発者向けサイトのチュートリアルを見つけることができます

GestureDetector gDetector = new GestureDetector(this, new SingleTap()); 
mEditButton.setOnTouchListener(new OnTouchListener() { 

    @Override 
    public boolean onTouch(View view, MotionEvent event) { 

     if (gDetector.onTouchEvent(event)) { 
      // single tap happened 
      return true; 
     } else { 
      // your code for move and drag or everything else 
     } 

     return false; 
    } 
}); 

private class SingleTap extends SimpleOnGestureListener { 
    @Override 
    public boolean onSingleTapUp(MotionEvent event) { 
     return true; 
    } 
} 

here

関連する問題