ProgramingTip

Android 4.x에서 목록보기의 EditText가 포커스를 잃습니다.

bestdevel 2020. 11. 24. 08:16
반응형

Android 4.x에서 목록보기의 EditText가 포커스를 잃습니다.


여기에 어떤 질문이 많이 있다고 생각합니다.

이 문제는 소프트 키보드 가 처음 표시 될 때 발생합니다 . 표시 되 자마자 editText를 다시 편집 가능하게됩니다.

다음을 시도했습니다.

 android:windowSoftInputMode="adjustPan|adjustResize"

이 어떤 문제도 해결하지 않습니다. 소프트 키보드가 팝업 된 후 활동 크기를 조정하려는 경우 줄이 필수 인 것입니다. 불행히도 이로 인해 EditText 가 점점 늘어납니다. 이것은 아마도 크기 조정 프로세스 포커스를 얻는 ListView 자체 에 대한 것입니다 . 그래서 다음 해결 방법을 시도했습니다.

 listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

이로 인해 항상 에 포함 첫 번째 보이는 EditTextListView포커스를 얻습니다. 이것은 두 번째 행의 두 번째 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다음을 표시 DialogEditText필요에 따라 텍스트 뷰를 업데이트 행을 클릭하면?


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 등 모든 솔루션을 검색했습니다. 최상의 솔루션은 리사이클 러보기로 마이그레이션하는 것입니다.

참고 URL : https://stackoverflow.com/questions/20406472/edittext-in-listview-loses-focus-when-pressed-on-android-4-x

반응형