2012-01-30 7 views
0

ListView에 EditTexts가 있습니다. 시작시 초점이 맞지 않지만 사용자는 ListView 항목 (해당 ListView)을 길게 클릭하면 "편집 모드"를 시작할 수 있습니다. 첫 번째 이상한 일은 매우 긴 클릭이 발생했을 때입니다. EditText는 포커스를 얻지 만 키보드는 나타나지 않습니다. EditText는 최종적으로 나타나기 위해 두드려 야합니다. 그 후에 다른 목록 항목을 길게 클릭하면 키보드가 나타납니다. 내가 관측 한 내부 동작의 유일한 차이점은 첫 번째 경우에는 onClick 이벤트가 EditText에 발생하지 않지만 두 번째 경우에는 발생한다는 것입니다.EditText가있는 ListView의 이상한 소프트 키보드 동작

하지만 가장 실망스러운 것은 언젠가 몇 가지 항목을 편집하고 스크롤하여 여기저기서 몇 편 더 편집하면 갑자기 키보드가 보이지 않고 포커스가있는 EditText로 끝나고 다시 키보드를 가져올 수 없습니다 해당 EditText에서 두드리기가 도움이되지 않습니다. 내 apadter에서 정말 조심해야하고 EditText 상태를 저장하고 getView 메소드의 ListView 어댑터에서 다시 작성합니다.

이 내용을 디버깅하는 방법에 대한 제안 사항이 있으십니까? 아마도 키보드가 어떻게 나타나기로 결심하는지, 가능한 경우이 이벤트를 디버깅하는 방법을 설명 할 수 있습니다.

+3

'ListView'에서'EditTexts'를 사용하여 ** 많은 문제가 발생했습니다. 재활용이라는 관점은 초점과 주요 청취자들에게 혼란을 야기했습니다. 나는 완벽하지는 않지만'ScrollView'를 사용하는 것으로 옮겼다. 다행히도 수천 개의 항목을 추가 할 필요가 없으면 scrollview 방식이 효과가 없을 것입니다. – dmon

+0

나는 'ScrollView'에 대해 이미 생각하고 있습니다. 왜냐하면 당신은 완전히 맞습니다. 포커스와 키보드가 혼란 스럽습니다. 나는 수백 가지 항목을 가질 계획이 아니지만 읽고 sqlite db에서 항목을 저장해야합니다. ScrollView를 사용하여 가장 좋은 방법은 무엇입니까? –

+0

필요한 TextViews와 EditTexts를 ScrollView 내의 LinearLayout에 수동으로 추가하기 만하면됩니다. getView()와 모델 백킹 (backing)을 순환하는 어댑터가 있기 때문에 약간은 더 매력적입니다.하지만'addView()'를 호출하기 만하면됩니다. – dmon

답변

1

내가 requestFocus를()에 무슨 일이 일어나고 있는지의 정말 좋은 설명을 발견했습니다 여기에 호출 단어 몇 Android Actionbar Tabs and Keyboard Focus : 당신이 requestFocus를()를 호출 할 때 동안 (또는 인해 레이아웃의 XML 설정이라고) 전체 뷰 트리가 아직 레이아웃되지 않았기 때문에 포커스가 있다고 생각 하겠지만 실제로는 그렇지 않을 수도 있습니다. 하나의 솔루션은 뷰에서 post (Runnable)를 호출하거나 레이아웃이 완료된 후 포커스를 요청하는 부모입니다.