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;