这是一个非常奇怪的问题,我理解这里是否会是downvotes
所以我有一个具有这种视图的自定义适配器(使用ViewHolder模式):
private class ViewHolder {
ImageView chatImage;
TextView chatName;
TextView lastMessage;
TextView lastMessageTime;
TextView unreadMessagesCount;
//ViewStub avatarsViewStub;
}
private ViewHolder createViewHolder (View view) {
ViewHolder holder = new ViewHolder();
holder.chatImage = (ImageView) view.findViewById(R.id.chat_image);
holder.chatName = (TextView) view.findViewById(R.id.chat_participant_name);
holder.lastMessage = (TextView) view.findViewById(R.id.last_message);
holder.lastMessageTime = (TextView) view.findViewById(R.id.last_message_time);
holder.unreadMessagesCount = (TextView) view.findViewById(R.id.unread_messages_count);
return holder;
}
TextView unreadMessagesCount
假设显示未读消息的数量,并且每当有新消息发布时都应该更新。但是你可以看到有很多Views
,我的目标是:只更新unreadMessagesCount,而不是在调用getView
时调用整个adapter.notifyDataSetChanges()
,我想要知道是否可能
编辑:我已将我当前的解决方案作为答案之一发布,但我们仍在寻找更好的方法
答案 0 :(得分:0)
您只能更新ListView
的列表项中的所需视图。通过使用以下方法,您可以在给定位置查看listitem。
public View getViewByPosition(int position) {
final int firstListItemPosition = filesListview.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + filesListview.getChildCount() - 1;
if (position < firstListItemPosition || position > lastListItemPosition) {
// return filesListview.getAdapter().getView(position, filesListview.getChildAt(position), filesListview);
return null;
} else {
final int childIndex = position - firstListItemPosition;
return filesListview.getChildAt(childIndex);
}
}
在特定位置获取视图后,您可以使用ViewHolder
获取getTag()
并更新数据。
View listItem = getViewByPosition(position);
if(listItem!=null){
ViewHolder holder = (ViewHolder)view.getTag();
//Update the data
}