我有一个包含闹钟时间的列表视图和一个用于关闭/打开该闹钟的切换按钮。当我单击特定列表视图的切换按钮时,我想设置/取消该特定警报。但是如何根据视图获取我点击的列表视图的位置?
当我点击我的切换按钮时,它会点击此代码:
public void enableAlarm(View view) {
// set/cancel alarm manager pending intent
}
我为数据库中的每个特定列表视图项存储了一些信息,但我需要listview位置。如何从视图中获取位置?
答案 0 :(得分:2)
我建议您创建一个自定义ArrayAdapter
类并覆盖getView()
方法。通过该方法,您可以访问设置切换的列表项的位置,并可以为每个切换按钮创建唯一的OnCheckedChangeListener
,并将其传递给列表的位置。
我假设你已经拥有了一个XML布局文件,用于在每个ListView项目中保存的内容,因为你提到了一个警报和切换按钮。
<强>更新强>
为了获得闹钟时间并将其发送到enableAlarm()
方法,您需要将其保存为final
内的getView()
变量,以便您可以在onCheckedChangeListener
内访问它。看看我在获取ToggleButton后添加的代码。
@override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater inflater = getContext().getLayoutInflater();
v = inflater.inflate(R.layout.alarm_item, parent, false);
}
ToggleButton toggle = (ToggleButton) v.findViewById(R.id.alarmToggle);
//get the alarm time
TextView timeView = (TextView) v.findViewById(R.id.theAlarmTextView);
final String alarmTime = timeView.getText();
toggle.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked)
//modify your enableAlarm method to take in the time as a String
enableAlarm(buttonView, alarmTime);
}
}
});
return v;
}