代码之家  ›  专栏  ›  技术社区  ›  Oliver

Android-Java通用spinneradapper

  •  1
  • Oliver  · 技术社区  · 14 年前

    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 回复  |  直到 14 年前
        1
  •  4
  •   junkdog    14 年前

    怎么样:

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