2011-02-07 5 views
1

мне нужно сделать ListView с этим конкретными атрибутами:пользовательское ListView с Checkbox и Spinner

1) Каждая строка имеет CheckBox слева и Spinner справа;

2) Spinner активен и может быть выбран только в том случае, если отмечен коррелированный CheckBox.

Мне удалось достичь (1) с помощью SimpleAdapter и ViewBinder.

Я также в состоянии поставить onClickListener каждому CheckBox используя ViewBinder, как это:

myCheckBox.setOnClickListener(new View.OnClickListener() { 
    @Override 
     public void onClick(View v) { 
     if (myCheckBox.isChecked()) //call the "enable spinner" function; 
    } 
}); 

Проблема заключается в том, что я не знаю, как найти правильный Spinner от «позволит блесны ". Каков наилучший способ достичь этого?

+0

Получите номер строки вашего 'CheckBox' из' ListView'. Это решит вашу проблему. –

+0

Как я могу это сделать? И откуда? – Abramodj

ответ

0

Хорошо, я решил, но я думаю, что есть лучший способ! Вот что я сделал:

1) я определил глобальную HashMap:

private HashMap<String,Object> spinnerMap = new HashMap<String, Object>(); 

2) В ViewBinder (когда Spinner считается) я retrive каждое число Spinner «s (она хранится в info.get (0)), и я связать его с центрифуги, используя HashMap:

spinnerMap.put(String.format("spinner %d", info.get(0)), spinner); 

3) В ViewBinder (когда CheckBox считается) я установить enableSpinner(Spinner spinner, boolean b) функции как onClickListener в CheckBox:

} else if(data instanceof String && view instanceof CheckBox) { 

        final CheckBox box = (CheckBox) view; 
        final String numero = (String) data; 

        box.setOnClickListener(new View.OnClickListener() { 
         public void onClick(View v) { 
          if (box.isChecked()) { 
           enableSpinner((Spinner)spinnerMap.get(String.format("spinner %d", Integer.parseInt(numero))), true); 
          } else { 
           enableSpinner((Spinner)spinnerMap.get(String.format("spinner %d", Integer.parseInt(numero))), false); 
          } 
         } 
        }); 

        return true; 
       } 

4) Наконец, вот функция:

private void enableSpinner(Spinner spinner, boolean b) { 

    spinner.setEnabled(b); 

} 

Это делает работу ... но вы знаете лучше?

Спасибо!