2010-11-06 2 views
1

Я ищу способ сделать это:Android - Java родовое SpinnerAdapter

public class SimpleText_SpinnerAdapter extends ArrayAdapter<Enum1> { 
    many lines of code with a one moment : String val = oneEnum1val_inparam.getlabel(); 
} 

public class SimpleText_SpinnerAdapter extends ArrayAdapter<Enum2> { 
    exactly the same code than previously, but for Enum2 
} 

public class SimpleText_SpinnerAdapter extends ArrayAdapter<Enum3> { 
    exactly the same code than previously, but for Enum3 
} 

Это сделано, чтобы иметь 3 переходников для 3 блесен, который содержит значение от 3 Дифференц Перечисления построен точно так же, но с разными значения.

Конечно, каждый тип перечисления имеет метод getLabel().

Я хотел бы найти способ сделать это без необходимости скопировать-вставить 3 раза один и тот же код для каждого адаптера. Это своего рода общий, на который можно ссылаться 3 специализированных.

Я не нашел решение. Не могли бы вы мне помочь?

Или, если вы имеете что-то более эффективным ...

Оливер

ответ

4

Как насчет:

public class SimpleText_SpinnerAdapter<T extends Enum<T> & ProvidesLabel> 
    extends ArrayAdapter<T> 
{ 
    // implementation 
} 



public enum Enum1 implements ProvidesLabel 
{ 
     Entry1("label 1"), 
     Entry2("label 2"); 

    private final String label; 

    private Enum1(String label) 
    { 
     this.label = label; 
    } 

    @Override 
    public String getLabel() 
    { 
     return this.label; 
    } 
} 

public interface ProvidesLabel 
{ 
    String getLabel(); 
} 

Instantiate класса с (нм конструктору):

SimpleText_SpinnerAdapter<Enum1> enum1 = 
     new SimpleText_SpinnerAdapter<Enum1>(context, textViewResourceId); 
+0

Спасибо очень ! Отлично работает. Какой сумасшедший вид кода – Oliver

+0

Если я могу спросить и взять Litlle немного вашего времени, что это значит: общественного класса SimpleText_SpinnerAdapter & ProvidesLabel> расширяет ArrayAdapter & ProvidesLabel> , waow, я не уверен, чтобы понять :-) – Oliver

+2

Нет проблем. Это означает, что SimpleText_SpinnerAdapter будет работать с типом (T), который расширяет класс Enum, и (&) он должен также реализовать интерфейс ProvidesLabel. Теперь определенный тип затем передается в ArrayAdapter в предложении extends. – junkdog

Смежные вопросы