Повторное использование кода Java через Inheritance, когда используются дженерики (перечислите, в частности)? - PullRequest
1 голос
/ 14 июля 2010

У меня очень мало знаний о дженериках, кроме как о том, как их использовать.В моем приложении у меня есть различные действия ListView, которые, похоже, имеют общие методы и переменные и имеют точный «алгоритм» в том смысле, что все выполняемые шаги очень похожи.

Например, в моем методе onCreate Iвызовите метод для добавления нижнего колонтитула, запустите диалоговое окно выполнения, вызовите метод для получения содержимого на основе URL-адреса xml, и есть поля 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;

Основное различие заключается в том, что для каждого отдельного действия в Списке используются разные типы объектов (т. е. Игра, Медиа, Статья и т. д.).Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 14 июля 2010

Я имею в виду что-то вроде:

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 голос
/ 14 июля 2010

Подойдет ли пример адаптера?

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 {
    //
    }
}
0 голосов
/ 14 июля 2010

Определить шаблонизированный список

List<E> mObjItems = new ArrayList(); 

и используйте его для хранения классов вроде Game, Media или Article.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...