有时,当我调用goToLast()时,它会在vista = lista.getChildAt()中抛出一个null异常,它会在列表满了时发生,我不知道为什么我有这个代码:
private void goToLast() {
lista.post(new Runnable() {
@Override
public void run() {
lista.setSelection(mensajes.getCount() - 1);
View vista = lista.getChildAt(mensajes.getCount() - 1);
TextView txtMensaje = (TextView)vista.findViewById(R.id.txtMensajeLista);
txtMensaje.setBackgroundColor(Color.RED);
}
});
}
答案 0 :(得分:0)
您应该记录lista.getChildCount(),查看ListView有多少个孩子。 ListView回收视图,这意味着它只能保持限制数量的视图。
因此,如果你想获得最后一个视图,你应该做这样的事情
private void goToLast() {
lista.post(new Runnable() {
@Override
public void run() {
lista.setSelection(mensajes.getCount() - 1);
// Figure out the last position of the view on the list.
int lastViewIndex = lista.getChildCount() - 1;
View vista = lista.getChildAt(lastViewIndex);
TextView txtMensaje = (TextView)vista.findViewById(R.id.txtMensajeLista);
txtMensaje.setBackgroundColor(Color.RED);
}
});
}
答案 1 :(得分:0)
ListView.getChildAt()
位置与适配器中的位置不同。 ListView会回收其视图,因此如果适配器中有更多项目,而不是适合屏幕,则不会为所有这些项目创建视图,而只会创建可见的视图。如果要更新ListView中的项目,则需要在适配器中更新它并调用notifyDataSetChanged()