天天看點

Android listview局部重新整理

我們都知道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);
            }
        }
    }
           

很簡單的就實作了。

繼續閱讀