我有聊天应用程序,在listview中有两种类型的元素
message
message
message
Header
message
message
在显示标题后的我的应用中,我需要在特定时间或事件后删除或隐藏它。 我知道我可以按位置获得这个项目。问题是我的listview动态地可以从双方增长。 在这种情况下我该怎么办? 您可以在此问题中查看我的自定义适配器:In Android how to prevent updating existing items on notifyDataSetChanged()
答案 0 :(得分:1)
我会将一个Class扩展为另一个,并将ArrayAdapter作为父类。
在您的抽屉中,您可以使用
if (position.get(pos) instanceOf MessageHeader) { }
else if (position.get(pos) instanceOf SimpleMessage) {}
你的班级可能看起来像那样:
class Message {
private String text;
}
class SimpleMessage extends Message {}
class HeaderMessage extends Message {}
并且您的ArrayAdapter接受消息
class MyCustomAdapter extends ArrayAdapter<Message> {}
如果您想添加或删除项目,可以使用以下方式执行此操作:
private ArrayList<Message> messages = null;
public myAdapter(List myList) { this.messages = (ArrayList)myList; }
public void addItem(Message message) { messages.add(message); forceUpdate(); }
public void removeItem(int position) {messages.remove(position); forceUpdate(); }
private voice forceUpdate() { notifyDataSetInvalidated(); notifyDataSetChanged(); }
private List<Integer> getItemPositionsWithHeader() {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0, j = messages.size(); i <= j; i++) {
if (messages.get(i) instanceOf HeaderMessage) {
list.add(i);
}
}
return list;
}
private void removeAllHeaderItemsFromList() {
for (Integer i : getItemPositionsWithHeader) {
messages.remove(i);
}
forceUpdate();
}