2012-01-01 52 views
1

是否可以使用一個適配器類(和它的實例)(例如自己的子類ArrayAdapter<ownDataType>兩個(或多個)不同的看法?在「適配器」上使用兩個(或多個)父視圖?

在我Activity,我有一個用來顯示兩個Spinner對象(和選擇)相關數據:父類別列表和所選父類別的子類別列表當然,子類別Spinner中的列表更新(設置新的ArrayAdapter),當父類別但是,我也希望能夠在創建活動時直接設置子類別(並自動選擇父類別),這使事情變得複雜化。現在乾淨的解決方案是創建一個自己的Adapter-Class(例如,派生自ArrayAdapter<CategoryPair>,其中CategoryPair是一個簡單的類,它包含一對父類和子類),並且此自己的適配器類處理所有邏輯以保持數據一致(在那裏更簡單)。

Adapter級的getView(int position, View convertView, ViewGroup parent)方法中,我需要可靠地識別我的活動中兩個對象中的哪一個需要創建視圖。

我可以依靠parent參數嗎?

你認爲我的想法是不錯的嗎?

編輯:代碼示例:

我的適配器類:

public class CategoryPair 
{ 
    Category parent;   
    Category sub; 
} 

public class CategoriesAdapter extends ArrayAdapter<CategoryPair> { 
    private Spinner parentSpinner; 
    private Spinner subSpinner; 
    public CategoriesAdapter(Context context, int textViewResourceId, Spinner par, Spinner sub) { 
     super(context, textViewResourceId); 
     parentSpinner = par; 
     subSpinner = sub; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (parent == parentSpinner) 
     { 
      // 
     } 
     else if (parent == subSpinner) 
     { 
      // 
     } 
     else 
     { 
      Log.e(TAG, "Invalid parent in CategoriesAdapter"); 
     }     
     return super.getView(position, convertView, parent); 
    } 

回答

1

是啊,這很好。每個視圖應該使用不同的實例你的適配器(確保這一點),所以,除非你的適配器代碼是錯誤的,並使用靜態變量,一切都應該工作得很好。

+0

不,我的意思是爲我的Activity的兩個'Spinner'使用同一個類的實例。所以每個'Activity'實例爲它的'Spinner'中的兩個使用* one *'Adapter'實例。我今晚會發布代碼示例(CET)。 – IanH 2012-01-02 09:02:34

+0

我不確定底層適配器代碼是否會讓你這樣做,但無論如何,我認爲這不是標準做法。您可以控制視圖中當前選定的對象,這將是完成我認爲您想要做的事情的理想方式。 – dmon 2012-01-03 01:20:29

相關問題