0

之一,我有RelativeLayout兩個聽衆:onTouch & onClick工作只是聽衆

private RelativeLayout userItem; 

userItem = (RelativeLayout) activity.findViewById(R.id.sliding_menu_userItem_rL); 

userItem.setOnClickListener(userItemOnClick()); 
userItem.setOnTouchListener(userItemOnTouch()); 

    /** 
    * Add user item reaction on click 
    */ 
    private View.OnClickListener userItemOnClick() { 
     Log.d(LOG_TAG, "userItemOnClick"); 
     return new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 
       UserFragment mFrag = new UserFragment(); 
       Log.d(LOG_TAG, "replace"); 
       t.replace(R.id.fragment_container, mFrag); 
       t.addToBackStack(null); 
       menu.toggle(); 
       t.commit(); 
      } 
     }; 
    } 

    /** 
    * Add user item reaction on touch 
    */ 
    private View.OnTouchListener userItemOnTouch() { 
     return new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         userItem.setBackgroundResource(android.R.color.holo_blue_dark); 
         break; 
        case MotionEvent.ACTION_UP: 
         userItem.setBackgroundResource(R.drawable.sliding_menu_user_item_bg); 
         break; 
        default: 
         break; 
       } 
       return true; 
      } 
     }; 
    } 

的問題是,onClickListener只有當這條線commeted反應:在其他情況下,工作

userItem.setOnTouchListener(userItemOnTouch()); 

只有onTouchListener。我不知道爲什麼。請幫助。

回答

2

你不能同時使用兩個,所以如果你想繼續一個特殊的條件,你可以定義一個布爾變量,然後返回這個布爾值在你的onTouchListener監聽器中,所以通過製作true/false你的變量它會切換你的onTouchListener監聽器激活/取消激活。

同樣的問題:

Android :: OnTouchListener && OnClickListener combination issue

Difference between OnTouchListener and OnClickListener

How to combine OnClickListener and OnTouchListener for an ImageButton

0

OnTouchListener,返回在onTouchtrue意味着聽衆已經消耗的情況下,這樣就不會達到你的OnClickListener。請嘗試並返回false

0

嘗試了這一點得到雙方易加工

userItem.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
      //Your work here 
       return false; 
      } 
     }); 


userItem.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       //Your work here 
      } 

     });