2013-10-13 3 views
0

나는 그 알람을 끄고 켜는 토글 버튼과 알람 시간을 포함하는 listview를 가지고있다. 특정 목록 뷰의 토글 버튼을 클릭하면 해당 특정 알람을 설정/취소하고 싶습니다. 그러나 뷰를 기반으로 클릭 한 목록보기의 위치는 어떻게 얻습니까? 나는 데이터베이스에서 각각의 특정 목록보기 항목에 저장된 일부 정보를목록보기 내에서 클릭 버튼의 위치를 ​​얻으려면 어떻게해야합니까?

public void enableAlarm(View view) { 

    // set/cancel alarm manager pending intent 
} 

,하지만 난 목록보기 위치를 필요

내 토글 버튼을 클릭

온/오프가이 코드를 안타. 보기에서 위치를 얻으려면 어떻게해야합니까?

+0

사용자는 목록보기 용 어댑터를 사용하고 있습니까? –

+0

배열 어댑터, 나는 목록보기 항목에 대한 setOnItemClick을 가지고 있지만 실제 토글 단추에는 해당되지 않습니다. – user10297

+0

setOnItemClick 행의 하위 뷰가 아닌 전체 행입니다. 나는 사용자 정의 어댑터를 사용해야한다고 생각합니다. –

답변

2

사용자 지정 ArrayAdapter 클래스를 만들고 getView() 메서드를 재정의하는 것이 좋습니다. 이 메서드에서 토글이 설정된 목록 항목의 위치에 액세스 할 수 있으며 각 토글 단추에 대해 고유 한 OnCheckedChangeListener을 생성하여 목록의 위치에 전달할 수 있습니다.

알람 및 토글 버튼을 언급했기 때문에 이미 각 ListView 항목에 보관해야하는 항목에 대한 XML 레이아웃 파일이 있다고 가정합니다.

업데이트 : 알람 시간을 얻고 enableAlarm() 방법에 전송하기 위해 , 당신은 그래서 당신이 onCheckedChangeListener 내에서 액세스 할 수 getView() 내에서 final 변수로 저장해야합니다. 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

알람을 켜거나 끄기 위해 on/off 토글을 사용하는 경우 알람 날짜/시간을 얻기 위해 어댑터 내부에 데이터 소스를 만드는 것이 괜찮습니까? – user10297

+0

알람을 설정하려면 데이터베이스에서 해당 정보가 필요합니다. – user10297

+0

내 대답을 업데이트 할 –

관련 문제