2012-11-23 103 views
1

我有一個自定義adapter,我忽略了isEnabled()方法。listview isEnabled()被調用兩次

我已經注意到,當方法被調用時,它被調用,觸摸,然後觸摸。如果你想要執行某些操作,這有點令人煩惱。

可以說你顯示吐司效應。效果會閃現兩次。

例子:

@Override 
public boolean isEnabled(int position) { 

    Toast.makeText(mContext, "Hello", Toast.LENGTH_SHORT).show(); // this will flash up twice 
    return true; 
} 

有向下禁止觸摸的isEnabled()方法的一種方式?

+2

我想'是不應該isEnabled'用作回調引發這樣的動作,但它打算重寫提供一些信息。換句話說,你不應該對它被調用的方式和時間有任何洞察或期望。 – fiddler

+1

是的'isEnabled'絕對不是用來執行操作的。你應該修復你的方法,並不保證在任何接觸中都會調用「isEnabled」。所以下一個Android版本可能會破壞你的代碼。此外,整個'適配器'不是執行操作的最佳位置。以'ListView'(或任何使用適配器)並使用它的'setOnItemClickListener'方法來執行點擊操作。 – zapl

+0

我同意這一點。我的情況有點獨特,因爲我需要在列表項被點擊和禁用時通知用戶。我可以通過擴展適配器並覆蓋isEnabled()來很好地管理它。 – HGPB

回答

1

使用適配器的一般變量,

Boolean isFirstTime=true; 

@Override 
public boolean isEnabled(int position) { 

    if(isFirstTime){ 

     Toast.makeText(mContext, "Hello", Toast.LENGTH_SHORT).show(); // this will flash up twice 
     isFirstTime = false; 
    } 


    return true; 
} 
+0

這就是我所做的一切!感謝您的確認。它讓我之前 – HGPB

+0

會做了約2分鐘... – HGPB

+0

我的解決辦法:如果'(mToastCounter == 1){ \t \t \t Toast.makeText(mContext,信息,Toast.LENGTH_LONG).show(); \t \t \t mToastCounter = 0; \t \t} \t \t mToastCounter ++;' – HGPB