У меня очень мало знаний о дженериках, кроме как "использовать их". В моем приложении у меня есть различные функции ListView, которые, похоже, используют похожие методы и переменные и имеют точный "алгоритм" в том смысле, что все выполненные шаги все одинаковы.
Например, в моем методе onCreate я вызываю метод для добавления нижнего колонтитула, запуска диалогового окна выполнения, вызова метода для получения контента на основе URL-адреса xml, и есть поля обработчика и 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;
так что главное отличие состоит в том, что каждая другая деятельность будет использовать другой тип объекта для List (например, Game, Media, Article и т.д.). Как я могу это сделать?
Я думаю о чем-то вроде:
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 используется другая логика.
Будет ли пример адаптера?
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 {
//
}
}
Определите шаблонный список
List<E> mObjItems = new ArrayList();
и использовать для хранения таких классов, как Game
, Media
или Article
.