ListView 优化及分页加载

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值