0

android 2.3의 ListView에 이상한 문제가 있습니다. 응용 프로그램은 EditText 및 ListView가있는 간단한 수행 목록입니다. 텍스트를 쓰고 Enter 키를 누를 때마다 ListView에 텍스트가 추가됩니다. 문제는 3 번째 요소를 추가 할 때 발생합니다. ListView에서 순서가 엉망입니다 (3 번째 요소는 1 등). 나는이 문제를 해결하여 매번 getView에서 데이터를 리바 인딩하지만 ViewHolder 패턴 최적화를 잃어 버리게된다. 4.0에서 나는 같은 코드에 문제가 없다. :) 누구든지이 행동의 이유가 무엇인지 알고 있습니까?ListView의 이상한 동작

이것은 내 getView 메소드입니다.

public View getView(int position, View convertView, ViewGroup parent) { 

    final ViewHolder view; 
    if(convertView == null) { 

     convertView = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.todo_single_row, parent, false); 

     view = new ViewHolder(); 
     view.text = (TextView)convertView.findViewById(R.id.tvToDoText); 
     view.date = (TextView)convertView.findViewById(R.id.tvToDoDate); 

     convertView.setTag(view); 
    } 
    else 
    { 
     view = (ViewHolder)convertView.getTag(); 
    } 

    view.text.setText(ToDoList.getInstance().getToDoList().get(position).getText()); 
    view.date.setText(ToDoList.getInstance().getToDoList().get(position).getDate().toString()); 

    return convertView; 
} 

나는 나의 어댑터를 정렬도 시도하지만 :(도움이되지 않았다.

Comparator<Item> comparator = new Comparator<Item>() { 
     public int compare(final Item item1, final Item item2) { 
       return item1.getText().compareToIgnoreCase(item2.getText()); 
       }; 
    }; 

public class Item { 
private String text; 
private Date date; 

public Item(String text) { 

    this.text = text; 
    this.date = new Date(java.lang.System.currentTimeMillis()); 
} 

public String getText() { 
    return text; 
} 

public void setText(String text) { 
    this.text = text; 
} 

public Date getDate() { 
    return date; 
} 

public void setDate(Date date) { 
    this.date = date; 
} 

}

답변

0

을 볼 수 있습니다 무엇에 의해 색인 안드로이드 목록보기 요소 2.3 및 이전 버전에.

0

일반적으로 getView()은 Android에서 결정한 순서로 행을 처리하기 때문에 실제로 발생합니다 .M 특정 요소를 가져 오려면 listView.getFirstVisible()을 사용해야합니다. 어떤 사람들은 이것을 순차적으로 부름 받았다고 생각하며, 그렇지 않다면, Adapter을 수립하는 명령 내에서 호출됩니다.

그러나이 동작을 무시할 수 있습니다. 이 경우 간단히 Comparator을 선언 할 수 있습니다.

Comparator alphabeticalOrder = new Comparator<String>() { 
    public int compare(final String str1, final String str2) { 
    return str1.compareToIgnoreCase(str2); 
    }; 
}; 

그 후, 당신은 단순히 당신의 Adapter에을 설정하여 행의 내용이 문자열 인 경우 예를 들어, 이것은 하나 개의 방법이 될 것입니다.

adapter.sort(alphabeticalOrder); 
+0

행 처리에 대한 보증이없는 경우 정렬을 통해 어떤 이점이 있습니까? – Johnny

+0

정렬은 기본적으로 행의 렌더링 작업에 위쪽 레이아웃을 추가합니다. 렌더링이 필요하다는 것을 알게 될 것이지만'.sort()'메소드를 정의했음을 고려하면이 함수는 존속 할 것이므로'ListView'가 정렬 될 것입니다. – nKn

+0

내 컬렉션을 정렬하지만 동일한 문제가 있습니다. 컬렉션이 정렬되었습니다. 로그에서 확인했지만 ListView의 순서가 올바르지 않습니다. notifyDataSetChanged를 호출하기 전에 컬렉션을 정렬하는 것을 놓쳤는가? – Johnny