0

我有一個SpannableString設置爲我TextView的文字是有一個單擊處理另一個視圖中。我的文字裏面有ClickableSpan,你說得對,可以點擊。ClickableSpan避免接觸傳播到父視圖

我的問題是,我需要在可點擊範圍內單擊時觸發事件,並且不會傳播到父視圖(因爲父級具有其他點擊處理程序)。

容器視圖只是我應用中帖子的提要,這些帖子可以包含h​​ashtags/mentions/links等。如果用戶點擊一個hashtag,他們應該轉到由可點擊範圍處理的hashtag,否則,他們應該去容器,它由容器本身處理。

是否有實現此功能的任何直接的機制是什麼?

+0

使用變量。在所有的可點擊的跨度..設置它們相應的..和使用對無視parentclick – Sush

+0

@sush我只是寫我的答案。我實際上完全按照你所說的做了,而且它很有效。 –

回答

1

我曾與一個可怕的,反模式的解決方案,效果很好走了過來。

在我的應用程序類中,我定義:

public static boolean shouldIgnoreNextTouchEvent = false; 

在我ClickableSpan的click處理程序中,我給自己定一個全局標誌,以避免下一個觸摸事件爲真:

ClickableSpan clickableSpan = new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     App.shouldIgnoreNextTouchEvent = true; 
     ... 
    } 
} 

然後在我父視圖的處理程序:

@Override 
public void onClick() { 
    if(App.shouldIgnoreNextTouchEvent){ 
     App.shouldIgnoreNextTouchEvent = false; 
     return; 
    } 
    ... 
} 

我知道這不是一個很好的解決方案,但它的工作原理就像一個魅力。

0

或者,

  1. 添加標籤到生成點擊事件

`

微件
ClickableSpan clickableSpan = new ClickableSpan() { 
      @Override 
      public void onClick(View widget) { 
       widget.setTag("hashtag"); // or anything else 
      } 
    } 

`

  • 在父級中,檢查標籤是否存在。如果是,這已被ClickableSpan消耗
  • `

    @Override 
        public void onClick(View view) { 
         String tag = (String) view.getTag(); 
         if(tag.equals("hashtag"){ 
          // Already consumed by child (ClickableSpan) 
          return; 
         } 
         // rest of your code ... 
        } 
    

    `