Android - Java универсальный SpinnerAdapter - PullRequest
1 голос
/ 06 ноября 2010

Я ищу способ сделать это:

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 специализированных.

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

Или, если у вас есть что-то более эффективное ...

Оливер

1 Ответ

4 голосов
/ 07 ноября 2010

Как насчет:

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();
}

Экземпляр класса с (nm конструктор):

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