我在Android 2.3上有ListView的奇怪问题。应用程序是EditText和ListView的简单待办事项列表。每次写文本并按ENTER键时,文本都会添加到ListView中。当我添加第3个元素时,问题发生,ListView陷入混乱(第3个元素变成第1个)。我解决了这个问题所以我每次都在getView中重新绑定数据但是在这种情况下我失去了ViewHolder模式优化。在4.0我没有相同的代码问题:)。有谁知道这种行为的原因是什么?
这是我的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 :(得分:1)
2.3及更早版本的Android列表视图元素由可见内容编制索引。您需要使用listView.getFirstVisible()来获取特定元素。
答案 1 :(得分:1)
这实际上是因为通常getView()
按照Android确定的顺序处理行。许多人认为这是按顺序调用的,而不是,它是在一个建立Adapter
的订单中调用的。
但是,您可以覆盖此行为。在这种情况下,您只需声明Comparator
即可。例如,如果行的内容是字符串,则这将是一种方式:
Comparator alphabeticalOrder = new Comparator<String>() {
public int compare(final String str1, final String str2) {
return str1.compareToIgnoreCase(str2);
};
};
之后,您只需将其设置在Adapter
。
adapter.sort(alphabeticalOrder);