use*_*755 8 android listview android-listview
我有一个带复选框的ListView:
Oncheckedchanged(..) 用户在列表视图上选中/取消选中项目时调用OncheckedChanged(..) 用户单击listitem时再次调用 onItemClick(.....)这是一个已知的问题?如何区分事件.
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.row, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) convertView.findViewById(R.id.label);
viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.check);
viewHolder.imageview= (ImageView) convertView.findViewById(R.id.imageView1);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag.
list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.label, viewHolder.text);
convertView.setTag(R.id.check, viewHolder.checkbox);
convertView.setTag(R.id.imageView1, viewHolder.imageview);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.checkbox.setTag(position); // This line is important.
viewHolder.imageview.setTag(position);
viewHolder.text.setText(list.get(position).getName());
viewHolder.checkbox.setChecked(list.get(position).isSelected());
// change the default-image here
if(list.get(position).getcontact_id()==5)
{
viewHolder.imageview.setImageResource(android.R.drawable.ic_dialog_map);
}...
..
return convertView;
}
Run Code Online (Sandbox Code Playgroud)
编辑
onCheckedChanged()被调用
kap*_*ani 15
将onCheckChangeListener替换为onClickListener.
checkChanged将被调用两次,因为当您调用setChecked()方法并单击复选框时将调用它.
Aja*_*jay 10
我通过检查解决了这个问题:
mSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(buttonView.isPressed()){
// do you operation
});
}
});
Run Code Online (Sandbox Code Playgroud)
避免多次调用
这是预期的行为:
onCheckedChanged(CompoundButton buttonView, boolean isChecked)每当检查/取消选中时,都会调用每个项目.Android已决定为您跟踪所有项目状态,并在每次更改时为您调用每个项目.使用该isChecked参数,您可以区分发生的情况.
onItemClick()只要其中一个项目被点击就会被调用 - 这不一定是项目中的复选框,而是某个地方.通常后来选择该项目 - 再次,并非总是如此.
如果您需要知道列表视图中实际选择了哪个项目,请使用OnItemSelectedListener.onItemSelected().这是一个叫做获取选择的人(整个项目).
顺便说一句:您不需要手动编辑复选框的行为.选中/取消选中并在框中绘制勾选是由Android完成的.一旦知道选择了哪一个,您就需要获得检查状态.因此onCheckedChanged,就我所见,完全没有必要实施.
| 归档时间: |
|
| 查看次数: |
8834 次 |
| 最近记录: |