2014-06-11 3 views
0

ListView의 EditText-fields에 문제가 있습니다. 내가 스크롤 후 일부 설정을 재설정 (selectAllOnFocus) 및 선택 커서 바나나갑니다.Listview의 EditText 스크롤 후 이상한 선택 동작

사용자 지정 ArrayAdapter 및 사용자 지정 데이터 개체를 사용하여 목록보기를 만들었습니다. 이 경우 객체는 하나의 String 만 보유합니다 (단순화하기 위해).

내 활동

// adapter + content 
    List<ListviewObject> listViewContent = new ArrayList<ListviewObject>(); 
    for(int i = 0; i < 50; i++) { 
     listViewContent.add(new ListviewObject("num: " + i)); 
    }  
    adapter = new CustomListAdapter(AddNewPerson.this, R.layout.list_item, listViewContent); 

    // list 
    ListView mListView = (ListView)findViewById(R.id.sample_list); 
    mListView.setItemsCanFocus(true); 
    mListView.setAdapter(adapter); 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    HolderObject holder = null; 

    if(convertView == null) { 
     convertView = mLayoutInflater.inflate(layoutResourceId, parent, false); 
     holder = new HolderObject(); 
     holder.name = (TextView) convertView.findViewById(R.id.txt); 
     convertView.setTag(holder); 
    } else { 
     holder = (HolderObject) convertView.getTag(); 
    } 

    holder.lvObject = items.get(position); 

    setNameTextChangeListener(holder); 
// Retrieve the correct value 
    holder.name.setText(holder.lvObject.getName()); 

    return convertView; 
} 

public static class HolderObject { 
    ListviewObject lvObject; 
    TextView name; 
} 

private void setNameTextChangeListener(final HolderObject holder) { 
    holder.name.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
// Update the value 
      holder.lvObject.setName(s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 

     @Override 
     public void afterTextChanged(Editable s) { } 
    }); 
} 

는 내가 설정 한 다른 스레드에있는 모든 focusproblems 해결하려면 내 어댑터 : 활동 XML의 목록보기
android:descendantFocusability="beforeDescendants"
.setItemsCanFocus(true)
android:windowSoftInputMode="adjustPan" 매니페스트 XML

텍스트를 집중하고 편집하는 것이 좋습니다. 스크롤 할 때 올바른 값이 유지되고이 모든 것이 제대로 작동하는 것 같습니다.

스크롤하기 전에 일부 EditText를 클릭하기 전에 이런 일이 발생합니다. 나는 아래로 스크롤 위로 다시, 그리고 이전과 같은 클릭을 한 후

http://imgur.com/eeIKhCv

를 (마지막, 흐림을 집중 한 초점을 맞추고 클릭, 컨텐츠를 선택한 경우)이 발생합니다.

http://imgur.com/75mjPc3

+0

http://stackoverflow.com/questions/20406472/editext-in-listview-loses-focus-when-pressed-on-android-4-x이 링크를 참조하십시오. – duggu

+0

as per my 지식 목록보기에서 편집 텍스트를 사용하는 것은 나쁜 습관입니다. – duggu

+0

. 따라서 EditText 대신 TextView를 사용하여 클릭/블러에서 대체하는 것이 가장 실용적인 옵션처럼 보이거나 심지어 convertView를 재사용 할 수도 있지만 EditText는 그 내부에 있지 않습니다 (getView에서 다시 작성). 마지막 설정에서 더 많은 단점을 보았 기 때문에 나쁜 행동을 통해 해킹하는 느낌이 들지 않습니다. – user3729954

답변

0

이 목록보기 재활용 메커니즘 때문이다. 자세한 내용을 알고 목록보기 재활용 메커니즘에 대해 당신이 마지막으로 저장하여이 문제를 방지 귀하의 경우이 link

를 참조 할 수는 지난 저장된 정수로 EDITTEXT과의 getView 세트에 초점을 집중하고 다른 위치를 건너 뜁니다. 이 도움이되기를 바랍니다.

+0

두 가지 이상이 잘못되어 문제를 해결하기로 결정했습니다. – user3729954

관련 문제