Android 4.x에서 목록보기의 EditText가 포커스를 잃습니다.
여기에 어떤 질문이 많이 있다고 생각합니다.
이 문제는 소프트 키보드 가 처음 표시 될 때 발생합니다 . 표시 되 자마자 editText를 다시 야 편집 가능하게됩니다.
다음을 시도했습니다.
android:windowSoftInputMode="adjustPan|adjustResize"
이 어떤 문제도 해결하지 않습니다. 소프트 키보드가 팝업 된 후 활동 크기를 조정하려는 경우 줄이 필수 인 것입니다. 불행히도 이로 인해 EditText 가 점점 늘어납니다. 이것은 아마도 크기 조정 프로세스 포커스를 얻는 ListView 자체 에 대한 것입니다 . 그래서 다음 해결 방법을 시도했습니다.
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
이로 인해 항상 에 포함 된 첫 번째 보이는 EditText 가 ListView
포커스를 얻습니다. 이것은 두 번째 행의 두 번째 EditText는 대신 배열을 보강해야합니다. 또한 결국 내가 처음으로 보이는 softkeyboard
키보드가 해제되고 ListView의 조정 크기가 다시 전체 크기로 처음으로 확장되고 맞출 수 있습니다.
onFocusChange()
ListView에 대한 이벤트를 가로채는 것과 같은 몇 가지 다른 작업을 시도했지만 TouchListener
. 특정 EditText에 대한 포커스를 다시 요청해도 성공하지.
user-가 제안한 다른 ScrollView
대신 를 사용하는 ListView
[해석] 관련 프로젝트에, 대한 옵션이 아닙니다.
이와 같은 상황에 대한 고전적인 해킹은 및 postDelayed()
. 어댑터에서 :
private int lastFocussedPosition = -1;
private Handler handler = new Handler();
public View getView(final int position, View convertView, ViewGroup parent) {
// ...
edittext.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (lastFocussedPosition == -1 || lastFocussedPosition == position) {
lastFocussedPosition = position;
edittext.requestFocus();
}
}
}, 200);
} else {
lastFocussedPosition = -1;
}
}
});
return convertView;
}
내 장치에서 작동하지만이 코드는 제외됩니다. 롬에서 버그가 다른 버전이나 롬에서 교체 될 경우에도 않을 것입니다.
를 내장 많은 다른 문제도있다 EditText
내에서 ListView
해킹 같은 느낌이 솔루션을 가지고 그. 고군분투 하는 다른 사람들을 모두 포함 합니다.
이와 같은 일이 포함하는 것도 있습니다.
.
비슷한 길을 여러 번 걸어 본 후, 나는 대부분의 기본 키보드 동작이나 기이 한 동작을 무시하는 것을 포기했습니다. 가능한 경우 앱에서 대체 솔루션을 찾는 것이 좋습니다.
당신이 가진 생각 해 봤나 ListView
행이 단지는 스타일이 될 TextView
다음을 표시 Dialog
와 EditText
필요에 따라 텍스트 뷰를 업데이트 행을 클릭하면?
ListView 행에있는 EditText를 눌렀을 때 ActionBar "훔치기"포커스에 문제가있었습니다. 위의 솔루션은 작동하지 않았지만 다음 솔루션이 저에게 효과적이었습니다.
http://www.mysamplecode.com/2013/02/android-edittext-listview-loses-focus.html
기본적으로 이것을 내 ListView에 추가했습니다.
android:descendantFocusability="beforeDescendants"
내 활동에 이것을 추가했습니다.
android:windowSoftInputMode="adjustPan"
활동에 windowSoftInputMode를 추가하도록 매니페스트 xml을 수정합니다.
<activity
android:name=".YourActivity"
android:windowSoftInputMode="adjustPan">
</activity>
나는 매우 오래된 스레드를 알고 있지만이 답변은 누군가에게 도움이 될 수 있으므로 여기에 있습니다.
RecyclerView로 전환하면 ListView의 이러한 성가신 문제에 대해 걱정할 필요가 없습니다. 새보기를 만드는 대신 이전보기를 재활용하고 재사용합니다.
나는 recyclerView
모든 제안 된 해결책에 대해 동일한 문제를 겪고 있었고 시도했습니다.
마지막으로, 내 경우의 문제는 실수로 내 XML의 높이에 대한 값을 recyclerView
가졌다 는 것입니다 wrap_content
. 로 변경하고 match_parent
예상대로 작동하기 시작했으며 focusable
값을 설정 하지 않고 사용android:windowSoftInputMode="adjustResize"
리사이클 러 뷰를 사용하면 목록 및 그리드 뷰의 여러 문제가 해결됩니다. 엇갈린 격자보기로 작업 할 수도 있습니다. 이 http://android-er.blogspot.com.co/2015/07/staggeredgridlayoutmanager-google-app.html로 쉽게 작업을 시작할 수 있습니다.
목록 소프트 키보드를 커버하기에 충분히 긴 경우, EditText
인은 Listview
안드로이드 4.x를 누를 때 포커스를 잃을
한 가지 해결책은 Listview
화면 높이가 절반 인 선형 레이아웃 으로 래핑하는 것 입니다.
Listview
가 소프트 키보드를 덮지 않을 때마다 모든 것이 정상입니다.
제 경우에는 어댑터에 currentFocusedRow 로컬 값을 추가했습니다. getView () 메서드에서 각 editText에 다음 코드를 추가했습니다.
if (currentlyFocusedRow == position) {
editText.requestFocus();
}
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
if (currentlyFocusedRow == -1) {
currentlyFocusedRow = position;
}
} else {
currentlyFocusedRow = -1;
}
}
});
같은 문제가 발생했습니다. inputMode, focusability 등 모든 솔루션을 검색했습니다. 최상의 솔루션은 리사이클 러보기로 마이그레이션하는 것입니다.
'ProgramingTip' 카테고리의 다른 글
'체크 아웃되지 않은'브랜치 푸시 (0) | 2020.11.24 |
---|---|
EF 코드 우선에서 링크 테이블에 대한 계단식 삭제를 중단하는 방법은 무엇입니까? (0) | 2020.11.24 |
크기 만 제공하여 Java 에서처럼 Kotlin에서 배열을 생성해야합니까? (0) | 2020.11.24 |
업데이트 할 수 없음 : 추적 된 분기 없음 (0) | 2020.11.23 |
Python이 같은 폴더에서 모듈을 수 없습니다. (0) | 2020.11.23 |