如何在列表视图中点击切换按钮的位置?

时间:2013-10-13 05:44:12

标签: android listview alarmmanager togglebutton

我有一个包含闹钟时间的列表视图和一个用于关闭/打开该闹钟的切换按钮。当我单击特定列表视图的切换按钮时,我想设置/取消该特定警报。但是如何根据视图获取我点击的列表视图的位置?

当我点击我的切换按钮时,它会点击此代码:

public void enableAlarm(View view) {

    // set/cancel alarm manager pending intent
}

我为数据库中的每个特定列表视图项存储了一些信息,但我需要listview位置。如何从视图中获取位置?

1 个答案:

答案 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;
}