ListView 优化及分页加载

来源:互联网 发布:360禁止软件安装 编辑:程序博客网 时间:2024/05/09 09:41

1、复用convertView

// list数据适配器    public class SwitchsAdapter extends BaseAdapter {        @Override        public int getCount() {            return devlist.size();        }        @Override        public Object getItem(int position) {            return devlist.get(position);        }        @Override        public long getItemId(int position) {            return -1;        }        @Override        public View getView(int position, View converView, ViewGroup parent) {            View view = converView;            Holder holder = null;            if (view != null) {                holder = (Holder) view.getTag();            } else {                view = View.inflate(DeviceSwitchActivity.this,                        R.layout.item_dev_switch_click, null);                holder = new Holder(view);                view.setTag(holder);            }            // 防止checkBox,toggleBtn滑动重复显示            holder.tgBtn1.setTag(position);            holder.tgBtn2.setTag(position);            holder.tgBtn3.setTag(position);            return view;        }优化二:缓存item条目的引用——ViewHolder     class Holder {              @Bind(R.id.tv_switch_devSite)            TextView tvDevSite;            @Bind(R.id.tv_switch_devtypeName)            TextView tvDevName;            @Bind(R.id.tg_btn1)            ToggleButton tgBtn1;            @Bind(R.id.tg_btn2)            ToggleButton tgBtn2;            public Holder(View view) {                ButterKnife.bind(this, view);            }        }    }

2、防止checkBox,toggleBtn滑动重复显示

    case 1:  //加载一路开关,其它几路也要设置属性        holder.tgBtn1.setVisibility(View.VISIBLE);        holder.tgBtn2.setVisibility(View.GONE);        holder.tgBtn3.setVisibility(View.GONE);        holder.tgBtn4.setVisibility(View.GONE);        holder.sbLight.setVisibility(View.GONE);

3、分页加载

private final class MyOnScrollListener implements OnScrollListener {        @Override        public void onScrollStateChanged(AbsListView view, int scrollState) {        }        @Override        public void onScroll(AbsListView view, int firstVisibleItem,                int visibleItemCount, int totalItemCount) {            final int totalCount = firstVisibleItem + visibleItemCount; // firstVisibleItem当前页的第一项位置                                                                        // totalCount                                                                        // 当前页的最后一项位置            if (totalCount == totalItemCount) { // 当前这一页加载完成,等待加载下一页                if (loadState == LOAD_STATE_IDLE) {                    loadState = LOAD_STATE_LOADING;                    new Thread() {                        public void run() {                            try {                                Thread.sleep(1000);                            } catch (InterruptedException e) {                                e.printStackTrace();                            }                            int count = deviceAdpter.getCount(); // 获取deviceAdpter中的数据总数                            int dataIndex = 0; // 要加载的数据的index                            List<Device> result = new ArrayList<Device>();                            for (dataIndex = count; dataIndex < Math.min(count                                    + EACH_COUNT, LIST_COUNT); dataIndex++) {                                Device devdto = gvlistAll.get(dataIndex);                                result.add(devdto);                            }                            if (dataIndex <= LIST_COUNT) {                                Message msg = new Message();                                msg.what = 0x008;                                msg.obj = result;                                handler.sendMessage(msg);                            }                            if (dataIndex == LIST_COUNT) {                                loadState = LOAD_STATE_FINISH;                            } else {                                loadState = LOAD_STATE_IDLE; // list未加载完,待续                            }                        };                    }.start();                }            }        }    }
    case 0x008:                @SuppressWarnings("unchecked")                ArrayList<Device> result = ((ArrayList<Device>) msg.obj);                devlist.addAll(result);                deviceAdpter.notifyDataSetChanged();    break;
0 0
原创粉丝点击