在我的应用中,我选择了要订购的商品。我的问题在于,如果我检查Checkbox to Order,那么另一个复选框也已被检查。意味着如果我选择单个项目,则会检查两个项目。
开始5个项目时,它会被正确检查并显示在订购页面中。从第6项开始如果我选择它正在订购页面中显示其他项目。
这是我的清单代码:
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
final ViewHolder viewHolder;
if (view == null) {
view = inflater.inflate(R.layout.appetiserlistview, null);
viewHolder = new ViewHolder();
viewHolder.image=(ImageView)view.findViewById(R.id.appetiserimage);
viewHolder.text = (TextView) view.findViewById(R.id.appetisertext);
viewHolder.desc=(TextView)view.findViewById(R.id.appetiserdesc);
viewHolder.price=(TextView)view.findViewById(R.id.appetiserprice);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.bcheck);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.image.setImageBitmap(bmps[position]);
viewHolder.price.setText(prices[position]);
viewHolder.desc.setText(descs[position]);
viewHolder.checkbox.setTag(itemnames[position]);
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(itemnames[position]);
viewHolder.checkbox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if (((CheckBox) v).isChecked())
{
arr.add(itemnames[position]);
itemprice.add(prices[position]);
image.add(bmps[position]);
}
答案 0 :(得分:0)
根据listview的每个行为,它不会保存其项目的状态,因为它们在滚动时的Inflayet上,所以你应该使用一个布尔值数组来保持复选框的状态,
public class FriendListAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private boolean isCheck[] = new boolean[Data.fbFriendList.size()];
// Data.fbFriendList is arraylist contains data
public FriendListAdapter() {
mInflater = LayoutInflater.from(mContext);
Arrays.fill(isCheck, Boolean.FALSE);
}
@Override
public int getCount() {
return Data.fbFriendList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
View hView = convertView;
if (convertView == null) {
hView = mInflater.inflate(R.layout.friend_item, null);
ViewHolder holder = new ViewHolder();
holder.profile_pic = (ImageView) hView
.findViewById(R.id.profile_pic);
holder.name = (TextView) hView.findViewById(R.id.name);
holder.checkBox = (CheckBox) hView.findViewById(R.id.checkBox);
hView.setTag(holder);
}
final ViewHolder holder = (ViewHolder) hView.getTag();
if (isCheck[position]) {
holder.checkBox.setChecked(true);
} else {
holder.checkBox.setChecked(false);
}
try {
holder.profile_pic.setImageBitmap(Utility.model.getImage(
Data.fbFriendList.get(position).getFbFriendFBid(),
Data.fbFriendList.get(position)
.getFbFriendThumbImgUrl()));
holder.name.setText(Data.fbFriendList.get(position)
.getFbFriendName());
} catch (Exception e) {
e.printStackTrace();
holder.name.setText("");
}
holder.checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (holder.checkBox.isChecked())
isCheck[position] = true;
else
isCheck[position] = false;
}
});
return hView;
}
}
class ViewHolder {
ImageView profile_pic;
TextView name;
CheckBox checkBox;
}
这里的isCheck []是一个布尔数组,用于在Adapter类中保存复选框的状态,Data.fbFriendList是一个arraylist。
答案 1 :(得分:0)
它是ListView
的基本属性
不仅checkboxes
而且Edittext
和other input controls
具有与之相同的值
在list view
仅显示正在显示的项目。
当您scroll
创建新项目时,按照之前的显示状态,选中一个复选框以获取当前显示。
解决方案1:
创建一个list
store the states of all checkboxes(or list items)
,并在调用bindview() method
时检查复选框的状态,并根据列表检查并取消选中它们,同时创建checkbox listener
以便{{1}事件更改列表中复选框(或列表项)的状态,这样就可以获得解决方案
解决方案2:
如果只需要一个复选框,则可以使用启用多项选择的listview属性
修改1:
设置此属性
oncheckchange
为你的2
答案 2 :(得分:0)
您必须保存所有复选框的状态并相应地恢复它们。这是我已经发布的一个例子。如果您遇到任何问题,请告诉我。我会尽力帮助你。
检查此链接