我們都知道adapter.notifyDataSetChanged()方法可以通知adapter進行界面重新整理,此方法是将界面中的資料全部重新整理一遍,雖然listview自身做了緩存,并且我們複用了convertView,但是目前界面的item布局還是會全部重新整理,如果我們隻是改變item的一個屬性,比如點贊就要全部重新整理資料,有點小題大做了。是以實作局部重新整理是很有必要的。使用如下:
第一步。我們擷取要重新整理的item資料源和需要重新整理item的索引:
listview.setOnItemClickListener(newAdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//資料源内容同步更新
Useruser(User)parent.getItemAtPosition(position);
user.setName("iam change");
//更新被點選控件内容,代替調用adapter.notifyDataSetChanged();方法
updateName(user.getName, position);
}
});
第二步。單獨重新整理需要更新的view:
private void updateName(String name, int position) {
int firstVisiblePosition = listview.getFirstVisiblePosition();
int lastVisiblePosition = listview.getLastVisiblePosition();
//在看見範圍内才更新進度條
if (position >= firstVisiblePosition && position <= lastVisiblePosition) {
//擷取指定位置view對象
View view = listview.getChildAt(position - firstVisiblePosition);
if (view.getTag() instanceof TestListViewAdapter.ViewHolder) {
//擷取指定view對應的ViewHolder
TestListViewAdapter.ViewHolder viewHolder = (TestListViewAdapter.ViewHolder) view.getTag();
viewHolder.name.setText(name);
}
}
}
很簡單的就實作了。