2010-07-14 53 views
1

除了如何「使用它們」,我對泛型非常瞭解。在我的應用程序中,我有不同的ListView Activity,它們似乎共享類似的方法和變量,並且在執行的步驟都非常相同的意義上具有確切的「算法」。涉及泛型時繼承Java代碼(特別是List)?

例如在我的onCreate方法中,我調用一個方法來添加頁腳,啓動進度對話框,調用一個方法來獲取基於xml url的內容,並且有一個Handler和Runnable字段用於調用方法在XML解析完成時填充列表的數據。

我在想也許我可以創建一個BaseListActivity,它可以完成所有這些操作,並且具有所有這些操作的方法,並且每個特定的ListActivity都可以從中進行擴展。問題是他們使用List對象來保存xml解析的項目和ListAdapter支持的項目。

因此,這裏使用的字段代碼:

// list of games from xml 
private List<Game> mGames = new ArrayList<Game>(); 
private List<Game> mNewGames = null; 

// Need handler for callbacks to the UI thread 
private final Handler mHandler = new Handler(); 

// Create runnable for posting 
final Runnable mUpdateResults = new Runnable() { 
    public void run() { 
     mGames.addAll(mNewGames); 
     fillData(); 
    } 
}; 

LayoutInflater mInflater = null; 
private ProgressDialog mProgressDialog = null; 
private int currentPage = 0; 

所以真正的主要區別是,每一個不同的活動會使用不同的對象類型的列表(即遊戲,媒體,文章等。 )。我會如何去做這件事?

回答

1

我想到的是這樣的:

public abstract class BaseListActivity<T> extends ListViewActivity { 
    private List<T> mItems; 

    protected abstract List<T> readAllFromXML(); 
    ... 

} 

參數T代表的實際類型列表活動實現使用。例如,一個派生類可以看起來像:

public TexyListActivity extends BaseListActivity<String> { 
    protected List<String> readAllFromXML() { 
     .... 
    } 
    ... 
} 

方法readAllFromXML留給子類實現,因爲每個實施例示用於所述列表中的不同對象類型,因此它是使用不同的邏輯來從XML創建它們。

-1

定義模板化的列表

List<E> mObjItems = new ArrayList(); 

,並用它來保持像GameMedia,或Article類。

1

將一個適配器的例子嗎?

public abstract class OnlineListAdapterTyped<T> extends BaseAdapter { 

private final ArrayList<T> items = new ArrayList<T>(); 

    @Override 
    public final T getItem(int position) { 
     return items.get(position); 
    } 

    protected abstract T deserialize(JSONObject obj) throws JSONException; 
} 

public class CategoriesAdapter extends 
     OnlineListAdapterTyped<CatalogAppCategory> { 

    @Override 
    protected CatalogApp deserialize(JSONObject obj) throws JSONException { 
    // 
    } 
}