总结一下填充listview的步骤:
1:准备数据:先把要填充的数据从数据库中查询出来,放入一个list存放
2:设置listview中item的格式,新建一个xml文件,自定义布局
3:新建一个adapter类继承baseadapter,需要重写几个方法
@Override
public int getCount() {
System.out.println("getCout执行");
return timelist.size();
}
这个方法每次滑动调用,返回list的大小就行
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView执行");
View view = null;
//converView 系统缓存
if(convertView == null){
//把布局文件填充成View对象
view = View.inflate(MainActivity.this, R.layout.item, null);
}
else{
view = convertView;
}
//findViewByid只能在当前布局文件中找
TextView tv_name = (TextView) view.findViewById(R.id.tv_id);
togglebutton= (ToggleButton) view.findViewById(R.id.toggleButton_id);
tv_name.setText(timelist.get(position).getHour()
+":"+timelist.get(position).getMinute());
System.out.println("选择开关状态:"+position+":"+timelist.get(position).getUserswitch());
//这里和下面togglebuttond的onchangeLIstener冲突
if(timelist.get(position).getUserswitch() == 0){
togglebutton.setChecked(false);
System.out.println(position+"关");
}
else{
togglebutton.setChecked(true);
System.out.println(position+"开");
}
togglebutton.setOnClickListener(new myToggleButtOnClickListener(position));
return view;
}
最重要的方法,每出现一个新的item时系统就会调用该方法,返回一个view对象用于显示在界面, convertView用于复用缓存(重要),其中在找item中的控件id时要用view.findViewById();
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
这两个方法只要重新一下就可以
4:控制显示的适配器写好后就可以让listview显示在界面了,用listview.setAdapter();
存在一个问题
就是如果在listview中需要显示一些状态的比如togglebutton,在显示按钮的状态时先查选数据库,再根据数据设置状态。如果你点击按钮改变状态时更改数据库内容,此时你的list中还是上次查询的数据,如果你把这个item滑出界面在滑进来时,按钮状态又回到之前的状态,想到的最简单的解决方法是,每次滑动之前就查询数据库,把数据放到list中
这样感觉太消耗资源