2010-11-06 26 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(); 
} 

與實例化類(納米構造):

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

謝謝非常 !它像一個魅力。多麼瘋狂的一種代碼 – Oliver 2010-11-08 12:36:41

+0

如果我可以問,並利用你的時間litlle位,這是什麼意思: 公共類SimpleText_SpinnerAdapter &ProvidesLabel>擴展ArrayAdapter &ProvidesLabel> ,waow,我不確定明白:-) – Oliver 2010-11-08 12:37:44

+2

沒問題。這意味着SimpleText_SpinnerAdapter將在擴展Enum類的類型(T)上運行,(&)它也必須實現接口ProvideLabel。然後將現在定義的類型傳遞給extends子句中的ArrayAdapter。 – junkdog 2010-11-08 13:37:58