2012-11-23 3 views
1

나는 메서드를 오버라이드하는 사용자 정의 adapter을 가지고 있습니다.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'은 행동의이 종류를 트리거하는 콜백으로 사용 안되지만 몇 가지 정보를 제공하기 위해 오버라이드 (override)하기위한 것입니다. 즉, 호출되는 방법과시기에 대한 통찰력이나 기대를 가져서는 안됩니다. – fiddler

+1

예'isEnabled'는 분명히 동작을 수행하기위한 것이 아닙니다. 당신은 당신의 접근 방식을 고쳐야한다. 어떤 터치에서도'isEnabled'가 호출된다는 보장은 없다. 그래서 다음 안드로이드 버전으로 코드가 손상 될 수 있습니다. 또한, 전체'Adapter'는 행동을 수행하기에 최적의 장소가 아닙니다. 'ListView' (또는 Adapter를 사용하는 것은 무엇이든)를 가져 와서 그것의'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

제 솔루션 :'if (mToastCounter == 1) { \t \t \t Toast.makeText (mContext, Message, Toast.LENGTH_LONG) .show(); \t \t \t mToastCounter = 0; \t \t} \t \t mToastCounter ++;'그것이 사실이지만, mToastCounter 항상 ++로 성장할 것입니다 : 내가 if 문 – HGPB

관련 문제