2013-07-04 4 views
2

각 행의 길이가 EditText 인 간단한 ListView을 만듭니다. 여기 내 R.layout.item 경우 : EditTextandroid:inputType="textMultiLine" 플래그를 통해 멀티 라인 입력을 허용하는 방법ListView가 여러 줄로 입력 할 때 맨 위로 스크롤 EditText

<?xml version="1.0" encoding="utf-8"?> 

<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textMultiLine"> 

</EditText> 

알 수 있습니다. ArrayAdapter을 사용하여 ListView을 스크롤 할 수있는 행 번호로 채 웁니다. 내 경우에는 항목이 다음은 40입니다 내 MainActivity.java :

I 20 행 및 텍스트 입력을 시작 아래로 스크롤,하지만 난 줄의 끝에 도달 할 때 EditText가에 대한 수용하기 위해 크기를 변경
public class MainActivity extends ListActivity { 

    final int NUM_ITEMS = 40; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String[] items = new String[NUM_ITEMS]; 
     for (int i = 0; i < NUM_ITEMS; i++) { 
      items[i] = Integer.toString(i); 
     } 
     setListAdapter(new ArrayAdapter<String>(this, R.layout.item, items)); 
    } 

} 

두 번째 행에 갑자기 ListView이 자동으로 맨 위로 스크롤됩니다.

내가 묘사 한 행동을 끔찍한 사용자 경험이라고 생각하며 나는 왜 이것이 디폴트가되어야하는지 이해하기 위해 고심합니다. 내가 찾는 행동은 위의 행을 넣은 채로 머물러야하고 아래 행은 필요한 금액만큼 이동하여 확장 된 EditText을위한 공간을 남겨 두는 것입니다. 그것을 어떻게 성취 할 수 있습니까?

몇 가지 추가 정보는 Android 4.2.2에 대한 에뮬레이터에서이 코드를 실행하며 장치는 3.2 "HVGA 슬라이더 (ADP1)입니다. 사용자가 경험 한 버그를 재현하기 위해 특정 장치를 선택했습니다

. 참으로 이상한 기본 동작하지만 그 대신 문제의 원인과 투쟁의
+0

포커스와 리사이클링 때문에 EditTexts와 ListViews를 혼합하지 말 것을 제안합니다. 엉덩이에 큰 고통을줍니다. 그렇게 많은 EditText를 가질 계획이 없다면 ScrollView를 사용하는 것이 좋습니다. – dmon

+0

불행히도 ListView 내에서 EditTexts를 중심으로 전체 앱 개념을 구축했습니다. [my app] (https://play.google.com/store/apps/details?id=dk.bendingspoons.fontsy)을 확인하면 내가 실제로 변경할 수 없다는 것을 이해할 수 있습니다 :)하지만 네 말이 맞아. 엉덩이에 큰 고통이 있습니다. –

답변

0

, 당신은 몇 가지 간단한 단계를 통해 문제를 해결할 수 있습니다 : 사용자가 변경 될 때마다

  • AbsListView.OnScrollListener를 사용하여 스크롤 상태를 추적 'onScroll 콜백 firstVisibleItem의 값을 저장하십시오.
  • 다소 번거롭지만 서브 클래스 EditText 및 오버플로 onSizeChanged 일 수 있습니다. 이 방법에서는 목록보기를 알립니다 (그리고 super.onSizeChanged에 전화하는 것을 잊지 마십시오).
  • EditText이 변경되었다는 목록보기가 나타나면 smoothScrollToPosition에 마지막으로 firstVisibleItem 값을 저장하여 저장해야합니다.
+0

제안 해 주셔서 감사합니다! 결국 나는 문제가 하드웨어 키보드에서만 발생한다는 것을 알게되었습니다. 대신 소프트 키보드로 실행하려고하면 크기가 변경 될 때 목록이 이동하지 않습니다. 나는 그것을 당장 풀기 위해 포기했지만 올바른 답을 제시한다. –

관련 문제