2013-12-16 137 views
2

我具有許多彼此不同顯著自定義對象。這些對象存儲在不同的列表中,並將顯示在不同的ListView中。由於這些ListView的設計,我需要創建自己的自定義ArrayAdapter。事情是,ListView設計應該與所有ListView相同,而不管列表中的對象如何。的Android:自定義ArrayAdapter(一個或多個),用於不同自定義對象

爲了實現這一點,我創建一個ArrayAdapter爲每個類型的對象。例如。爲自定義對象coA我做了一個ArrayAdapter coAAdapter,併爲自定義對象coB我做了一個ArrayAdapter coBAdapter。這似乎是很不必要的我,因爲旁邊除了這些適配器之間沒有什麼區別有什麼樣的ArrayAdapter的自定義適配器延伸,它們的構造函數:

適配器類輔酶A:

public class CoAAdapter extends ArrayAdapter<CoA> { 
    public CoAAdapter (Context context, int resource, List<CoA> objects) {...} 
} 

適配器類的CoB :

public class CoBAdapter extends ArrayAdapter<CoB> { 
    public CoBAdapter (Context context, int resource, List<CoB> objects) {...} 
} 

請問這是怎麼定製ArrayAdapters都應該被使用,或者是有辦法使這個設計簡單了很多,就像所有的自定義對象一個自定義的ArrayAdapter?

我曾經想過一些不同的解決方案,如創建一個通用的自定義適配器或使用通過繼承我的自定義對象創建一個共同的基類,但經過一番研究這些都不似乎是一個不錯的辦法。

+0

貴公司的所有列表視圖使用您的行相同的佈局? – Apoorv

+0

製作一個適合所有對象的界面,並可以繪製所有需要的數據。然後您可以爲該接口編寫適配器 – Gooziec

+0

@Apoorv是,或多或少。對於我的列表項目,我有幾個佈局,它們僅在文本顏色上有所不同,但它們是相同的。 – HigiPha

回答

3

你可以定義你的適配器是這樣的:

public class MyArrayAdapter<T> extends ArrayAdapter<T> 
{ 
     HashMap<T, Integer> mIdMap = new HashMap<T, Integer>(); 

     public MyArrayAdapter(Context context, int textViewResourceId, List<T> objects) { 
     super(context, textViewResourceId, objects); 
     for (int i = 0; i < objects.size(); ++i) { 
      mIdMap.put(objects.get(i), i); 
     } 
     } 
    } 
+0

這種方法跨越了我的想法,但我讀到,這不是一個完美的解決方案,由於不是類型安全? – HigiPha

+0

它是類型安全的。你爲什麼認爲它不是? – Salil

+0

對不起,我在一些類似的問題中讀到它,我誤解了其中一個答案。那我就試試吧! – HigiPha

0

也許,你想用一個BaseAdapter。而在該適配器的getView(),檢查對象的instanceof,做相應的事情。

0
public interace SomeInterface 
{ 
    public String getString(); 
} 

public class classA implements SomeInterface 
{ 
    ... 

    @Override 
    public String getString() 
    { 
     return "blabla"; 
    } 
} 

public class classB implements SomeInterface 
{ 
    ... 

    @Override 
    public String getString() 
    { 
     return "whatever"; 
    } 
} 

public class InterfaceAdapter extends ArrayAdapter<SomeInterface> 
{ 
    public InterfaceAdapter (Context context, int resource, List<SomeInterface> objects) {...} 
} 
相關問題