2012-11-23 62 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