listview中数据如果要实时读写,需要每次操作后都要查询数据库吗

总结一下填充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中
这样感觉太消耗资源
阅读更多
个人分类: Android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

listview中数据如果要实时读写,需要每次操作后都要查询数据库吗

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭