2013-10-13 60 views
0

我有一个列表视图,其中包含闹钟时间和一个切换按钮来关闭/打开闹钟。当我点击特定列表视图的切换按钮时,我想设置/取消特定的警报。但是,我如何获得基于视图点击的listview的位置?如何获取在ListView中点击切换按钮的位置?

当我点击我的切换按钮/关闭它击中这个代码:

public void enableAlarm(View view) { 

    // set/cancel alarm manager pending intent 
} 

我保存在数据库中每一个特定的ListView项的一些信息,但我需要的列表视图位置。我怎样才能从视图中获得位置?

+0

您是否使用自定义适配器进行listview。? –

+0

阵列适配器,我有一个setOnItemClick为列表视图项目,但没有击中实际的切换按钮。 – user10297

+0

setOnItemClick为完整行而不是行的子视图。我认为你应该使用自定义适配器。 –

回答

2

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

我假设你已经有了一个XML布局文件,因为你提到了一个报警和切换按钮,所有应该在每个ListView项目中都有。

更新: 为了得到报警时间,并将其发送到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; 
} 
+0

如果我使用开/关切换来启用或禁用闹钟,可以在适配器内创建数据源以获取闹钟日期/时间吗? – user10297

+0

我需要来自数据库的信息来设置警报。 – user10297

+0

即将更新我的答案 –

相关问题