2010-07-14 47 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 { 
    // 
    } 
}