请问 以下的效果是怎么实现的呢?
现在做到的是 从网络数据库中获取数据,并用listview显示出来。
但是要做到 当点击其中一项的时候,出现右手边的 “打勾”的符号, 而且只能选中三个,当点击 第四的时候,会弹出提示框 “不能选择多于3个”。
现在这个 listview的显示 主要是用 自定义adapter的方法显示 如public class xxxAdapter extends BaseAdapter { }
而 那个打勾的效果 是要在 xxxAdapter 里边的 item布局文件里边 弄个 checkbox吗?还是怎么处理呢?
如果在布局里边弄个 textview 显示 文字 ,弄个checkbox显示 打勾的, 那么这 checkbox怎么处理已经点击了 三个了呢?
麻烦会的朋友帮忙回复,谢啦

------解决思路----------------------
item的布局是自定义的,左边一个textview,右边一个checkbox
至于数量自己计数吧,检查被选中的checkbox是否大于3
------解决思路----------------------
右边那个勾勾用什么都可以,imageView什么的都行,只要能显示那个勾勾就行。
我觉得计数还是要放到你自定义的adapter里面比较好,大概的思路可以这样写
在adapter中有一个全局变量count=0,这个变量有get和set方法,当你的item发生
点击事件时,去adapter中get count这个变量,如果小于3,显示后面的勾勾,并且把
count+1 set回adapter
并且建议你的item还要设一个变量boolean flag,默认为false,这个变量判断这个item是否打了勾勾,
点击这个item的时候,判断这个变量是否为false,如果为false,去做后面的事情,
如果能打勾勾,再把这个变量set 为true。
如果为true,就把后面的勾勾取消掉,flag set 回false。
这样你就还可以防止点错勾勾,可以取消勾了。
打得有点乱,不晓得我说明白没
------解决思路----------------------
百度checkbox+listview很多案例
------解决思路----------------------
看来你对listview还不是很熟悉啊。你传给adapter的不是一个list<object> 么?
我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag
不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??
我把点击事件给你说得详细点吧。
你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener);
在OnItemClickListener中有一个必须重写的方法:
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置,
//通过这个参数,你可以找到对应的item的flag
}
------解决思路----------------------
首先,我建议你去好好看看listview的讲解,网上,书上都行。
public Object getItem( int position ),adapter里面这个函数不应该return position。
这个函数的意思是返回你点击那个item的数据,也就是你传入那个list的具体的一个。应该写成这样:
public Object getItem( int position ) {
return Informationlist.get(position).;
}
这样你要获得对应item的值,只需要在item的点击事件中写 adapter.getItem.getflag就行了。
当然你需要在list<object>的object中写好flag的get,set方法。
然后你的下一个问题,getView跑的时候不是点击item的时候,这个方法的作用是,
展示view的,比如你当前页面初始能展示5个item,当你往下滑,这个时候第6个item
就要出现了,这时adapter就会自动调用getView()去生成一个view赋给新出现的item。
所以getView()不是你点击item的时候会调用的。
------解决思路----------------------
上面笔误,是要获得对应item的flag的值。。
------解决思路----------------------
@ pang376654973 谢谢您的回复
我实在是不太明白您说的意思,不知道怎么写这个代码。 如果方便的话, 能帮忙简单的 写下吗? 谢啦
如果你连我说得这些都听不懂的话,我建议你就先不要写这么复杂的listView了。
毕竟listview是个很基础的东西,建议你搞明白。
先写一个简单的listview,成功后。
再学习写自定义的adapter,怎么传值,里面的每个方法是什么意思。
这些搞懂了,你最开始的问题就是小儿科了。
一步一步来,不要急了。。。。
------解决思路----------------------
@pang376654973 由于项目紧,请多多包涵
不知道你从网上下的数据的格式,我就简单跟你说一说。
假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样),
这样你需要把网上的数据解析成一个个图片,一个文字。
解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:
public class Infor {
public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string
public String word;
public boolean flag;
public Infor(){
}
public String getPicture() {
return picture;
}
public void setPicture(String picture) {
this.picture = picture;
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
这样你的实体类里面包含所有你需要的数据加上flag;
然后new你的实体类,并且用你的网上数据来给这个新new的对象赋值。
Infor infor = new Infor();
infor.setPicture(你从网上得到的数据);
infor.setWord(你从网上得到的数据);
infor.setFlag(false);
然后再将这个对象交给你的list
Informationlist.add(infor);
还有数据你就不停new Infor的对象,不停赋值,不停交给你的list,最后将这个list交给adapter就行了。
一般来说,我们会根据网上的数据的格式来写个for循环,来控制new多少个infor对象,自动赋值。
因为不知道你从网上下的是什么数据,所以就不乱说了,你自己根据网上数据的来设定条件吧。