在android中滚动列表时,已单击复选框未选中
在我的应用程序中,我有一个联系人列表…通过单击复选框,我可以添加联系人…同时更新联系人,我从数据库中获取已选中的复选框值,以向用户显示已单击的复选框…因此我从数据库中获取eventMO…滚动列表时,复选框变为未选中状态,然后下次选中时…像这样,它会产生问题 这是我的代码。请帮我找到解决方案在android中滚动列表时,已单击复选框未选中,android,Android,在我的应用程序中,我有一个联系人列表…通过单击复选框,我可以添加联系人…同时更新联系人,我从数据库中获取已选中的复选框值,以向用户显示已单击的复选框…因此我从数据库中获取eventMO…滚动列表时,复选框变为未选中状态,然后下次选中时…像这样,它会产生问题 这是我的代码。请帮我找到解决方案 public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
// Create a new row view
if (convertView == null) {
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.contactlist, null);
holder = new ViewHolder();
// Find the child views.
holder.userNameTxtV = (TextView) convertView.findViewById(R.id.text);
holder.mobileNumTxtV = (TextView) convertView.findViewById(R.id.mobile_number);
holder.cb = (CheckBox) convertView.findViewById(R.id.check_box);
// Optimization: Tag the row with it's child views, so we don't have
// to
// call findViewById() later when we reuse the row.
convertView.setTag(holder);
}
//To reuse already existing rows
else {
holder = (ViewHolder) convertView.getTag();
EventMO eventMO2 = (EventMO) getIntent().getParcelableExtra("eventMO");
if (eventMO2 != null) {
if (userMOs.size() >= eventUserRelationMOs.size()) {
if (position <= eventUserRelationMOs.size() - 1) {
List<EventUserRelationMO> eventUserRelationMOs = eventMO2.getEventUserRelationBOs();
int isInvited = eventUserRelationMOs.get(position).getIsInvited();
if (isInvited == 1) {
holder.cb.performClick();
}
}
}
}
}
holder.cb.setTag(userMOs.get(position));
holder.userNameTxtV.setText(userMOs.get(position).getUserName());
holder.mobileNumTxtV.setText(userMOs.get(position).getMobileNumber());
holder.cb.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox checkBox = (CheckBox) v;
UserMO userMO = (UserMO) checkBox.getTag();
userMO.setSelected(checkBox.isChecked());
}
});
EventMO eventMO2 = (EventMO) getIntent().getParcelableExtra("eventMO");
if (eventMO2 != null) {
if (userMOs.size() >= eventUserRelationMOs.size()) {
if (position <= eventUserRelationMOs.size() - 1) {
List<EventUserRelationMO> eventUserRelationMOs = eventMO2.getEventUserRelationBOs();
int isInvited = eventUserRelationMOs.get(position).getIsInvited();
if (isInvited == 1) {
holder.cb.performClick();
}
}
}
}
holder.cb.setChecked(userMOs.get(position).isSelected());
return convertView;
}
}
public View getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
//创建新的行视图
if(convertView==null){
mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
convertView=mInflater.充气(R.layout.contactlist,空);
holder=新的ViewHolder();
//查找子视图。
holder.userNameTxtV=(TextView)convertView.findViewById(R.id.text);
holder.mobileNumTxtV=(TextView)convertView.findViewById(R.id.mobile_编号);
holder.cb=(复选框)convertView.findViewById(R.id.check_框);
//优化:用行的子视图标记行,因此我们没有
//到
//稍后当我们重用行时调用findViewById()。
convertView.setTag(支架);
}
//重用现有行的步骤
否则{
holder=(ViewHolder)convertView.getTag();
EventMO eventMO2=(EventMO)getIntent().getParcelableExtra(“EventMO”);
if(eventMO2!=null){
if(userMOs.size()>=eventUserRelationMOs.size()){
if(position=eventUserRelationMOs.size()){
如果(位置尝试呼叫
holder.cb.setOnClickListener(null);
之后
以前
if (eventMO2 != null) {
在你的“else”块中
另一种方法是更换此部件:
if (isInvited == 1) {
holder.cb.performClick();
}
为此:
holder.cb.setChecked(isInvited == 1);
你能解释一下吗?上面的linecheckbox可能处于选中或未选中状态,因为它是从其他listItem回收的。而当你调用performClick checkbox时,只需将其状态切换为反向。假设复选框在选中状态下回收,isInvited为true->你调用performClick,复选框变为未选中。
holder.cb.setChecked(isInvited == 1);