Android 如何获取在listview中单击的切换按钮的位置?

Android 如何获取在listview中单击的切换按钮的位置?,android,listview,alarmmanager,togglebutton,Android,Listview,Alarmmanager,Togglebutton,我有一个包含报警时间的列表视图和一个用于关闭/打开报警的切换按钮。当我单击特定listview的切换按钮时,我想设置/取消该特定报警。但是如何根据视图获取单击的listview的位置呢 当我点击我的切换按钮开/关时,它会点击以下代码: public void enableAlarm(View view) { // set/cancel alarm manager pending intent } 我在数据库中为每个特定的listview项存储了一些信息,但我需要listview位置。

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

当我点击我的切换按钮开/关时,它会点击以下代码:

public void enableAlarm(View view) {

    // set/cancel alarm manager pending intent
}

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

我建议您创建一个自定义的
ArrayAdapter
类,并重写
getView()
方法。通过该方法,您可以访问设置切换的列表项的位置,并且可以为每个切换按钮创建唯一的
OnCheckedChangeListener
,并将列表的位置传递给它

我假设您已经为每个ListView项中应该保存的内容准备了一个XML布局文件,因为您提到了报警和切换按钮

更新: 为了获取报警时间并将其发送到
enableAlarm()
方法,您需要将其保存为
getView()
中的
final
变量,以便可以在
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;
}

您是否正在为listview使用自定义适配器。?数组适配器,我有一个用于listview项的setOnItemClick,但实际切换按钮没有点击它。setOnItemClick用于完整行,而不是行的子视图。我想你应该使用自定义适配器。是的。使listview的自定义行在getview中膨胀该行。然后从视图中找到切换按钮并在其上添加侦听器。:)你可以在这里找到一些有用的东西,如果我使用开/关切换来启用或禁用报警,可以在适配器内创建一个数据源来获取报警日期/时间吗?布局的膨胀似乎导致textview在我的listview中消失。有办法解决这个问题吗?每个列表项中的文本视图,还是列表视图上方的文本视图?您可能需要将一些
fill\u parent
match\u parent
值更改为
wrap\u content