0

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

当我单击打开/关闭切换按钮时,它会触发以下代码:

public void enableAlarm(View view) {

    // set/cancel alarm manager pending intent
}

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

4

1 回答 1

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;
}
于 2013-10-14T06:05:55.403 回答