我看了其他问题,但没有一个能满足我的需要。
我有一个列表视图,显示包含一些文本视图和复选框的对象(警报)列表。如您所想,此复选框用于激活和停用该警报。
当我到达此屏幕(警报列表)时,它会检查数据库中的活动状态,因此会检查一些复选框,而不检查其他复选框。
我需要的是单击复选框并在此时更改数据库中该警报的状态。离开屏幕前没有检查所有复选框的状态!我已经使用selectedItems或Holder类阅读了解决方案,但不适合我。
我想我需要在复选框中定义onClick事件(在AlarmAdapter中),但是警报列表在活动中(ListAlarms),所以我不知道如何"告诉" 34;警报列表"这是已单击的复选框(警报),然后更新其活动状态"。
有什么想法吗?也许控制行中的操作(使用OnItemClickListener)而不是单击复选框?
非常感谢!!!
答案 0 :(得分:1)
我想如果您在此处阅读回复,您将得到答案:
How to get selected list items from a Listview with checkBox and Custom Adapter?
答案 1 :(得分:0)
最后,我做了一个非清洁的解决方案:
适配器中的此代码:
CheckBox active = (CheckBox) view.findViewById(R.id.cb_active);
active.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
a.toggle();
boolean exists = false;
for(Alarm aux : modifiedAlarms){
if(aux.getId() == a.getId()){
exists = true;
}
}
if(!exists){
modifiedAlarms.add(a);
}
else{
//this is to guarantee that the alarm has the same state than the added one.
a.toggle();
modifiedAlarms.remove(a);
a.toggle();
}
}
});
active.setTag(a);
这个代码在活动中,离开屏幕时:
ImageView back = (ImageView)findViewById(R.id.iv_back);
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<Alarm> modified = adapter.getModifiedAlarms();
for(Alarm a : modified){
dataalarms.activeAlarm(a.getId(), a.getActive());
}
finish();
}
});
如果有人知道如何在活动中获取onClick事件,那么回答这里会很好。
谢谢! :)
答案 2 :(得分:0)
这是自定义对象的来源。您创建这些对象的数组,然后在适配器中的复选框的onClick事件中设置一个标志。然后,您可以访问此对象并检查标志。很抱歉创建了新的答案,但我的代表不够高,无法发表评论。