2013-08-17 94 views
1

我傾聽onGlobalLayoutListener,如下面的代碼所示。我只想聽它一次。 一旦onGlobalLayout()被調用,我想停止聽它。停止傾聽更多傾聽者事件

我嘗試使用removeOnGlobalLayoutListener()方法,但它給出了警告,調用所需的API級別16(當前最小值是14)

我也試過使用removeGlobalOnLayoutListener。但它已被棄用。

代碼:

searchWebView.getViewTreeObserver().addOnGlobalLayoutListener(
         new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 

     // Do something 
     // Remove listener 
    } 
}); 

如何刪除onGlobalLayoutListener

編輯:

enter image description here

+0

閱讀此主題[ViewTreeObserver] [1]:http://stackoverflow.com/questions/15162821/why-does-removeongloballayoutlistener-throw-a-nosuchmethoderror – strike

+0

@strike這給了同樣的錯誤。看到我編輯的問題有圖像。據說第一個被棄用,因此越過了它。第二種是在16級中加入的,我的是14。 – Geek

回答

7

您可以使用下面的代碼刪除OnGlobalLayoutListenerremoveGlobalOnLayoutListener()上仍然有strikethrough,這已被棄用。但是,皮棉警告將通過使用註釋來照顧。

@SuppressWarnings("deprecation") 
@SuppressLint("NewApi") 
searchWebView.getViewTreeObserver().addOnGlobalLayoutListener(
        new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 

     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { 
       searchWebView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      } else { 
       searchWebView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
      } 

    } 
}); 
+0

你知道爲什麼'removeGlobalOnLayoutListener()'方法仍然有黑線嗎?當這種方法停止工作時,它不會造成問題。 android停止支持它。 – Geek

+1

@Akash這是eclipse的方式,顯示在代碼中使用了不推薦使用的方法。對於所有密集的目的,以這種方式使用不推薦的方法是正確的。 '這種方法停止工作時不會引起問題。 android停止支持它。「不。方法調用將發生在支持它的API版本上。而且android並沒有從舊的API中拿走功能。它在新的API版本中添加新的(可能更好的)功能。較早的API保持不變。如果有的話,他們會更好地使用android發佈的所有'compat庫'。 – Vikram

+1

茄子! http://eggcorns.lascribe.net/china/32/intensive-purposes/ (抱歉,無法抗拒!) –