0

背景:我有一个相当受欢迎的小众应用程序,我想通过创建一个通用代码主库来扩展它,我可以用它来生成更多类似的应用程序,而且工作量很小。

超类(在库中):BaseTheme

子类(单独的应用程序):主题(扩展 BaseTheme,为每个应用程序提供一些特定方法)。比较器

在 Comparator 类中,我有一个 Arraylist。我想将 Comparator 移到库中,但这样做时,Arraylist 会引发错误,因为库中不存在主题

我尝试将 Arraylist 更改为 Arraylist,认为 Theme 是 BaseTheme 的扩展并且是允许的,但是当我尝试在 Arraylist 中创建主题时,这不起作用。

在应用程序代码中:

private ArrayList<Theme> mThemes;
private MyComparator mComparator;

mThemes = mComparator.compare(mSortType, mSortAorD, true, mThemes);

错误:MyComparator 类型中的方法 compare(int, int, Boolean, ArrayList) 不适用于参数 (int, int, boolean, ArrayList) - 我相信这是因为比较器的构造函数具有 ArrayList,因为 Theme 没有t 存在于库代码中

有什么办法可以做到这一点,还是我需要保持目前的状态(应用程序代码中的比较器)?

库代码:公共类 MyComparator {

private static Context mCtx;


public MyComparator(Context ctx) {
  mCtx = ctx;

}
public ArrayList<BaseTheme> compare(final int type, final int sort, Boolean flurry, ArrayList<BaseTheme> list) {
    Comparator<BaseTheme> myComparator = getComparator(Sort.SORT_ALPHABETICAL, Sort.DESC, flurry);
    Collections.sort(list, myComparator);

    myComparator = getComparator(type, sort, flurry);
    Collections.sort(list, myComparator);
    return list;
}

public abstract class BaseTheme {
public String mName;
public String mCreator;
public String mDate;
public String mAddress;
public int mThemeID;
public int mPopularity;
public boolean mIsFavorite;
public boolean mIsVisible;
public Context mCtx;

public BaseTheme(int themeID, String name, String creator, String date, String address, Boolean favorite, 
        Boolean visible, int popularity, boolean isFavorite, boolean isVisible, Context ctx) {

    setThemeID(themeID);
    setName(name);
    setCreator(creator);
    setDate(date);
    setAddress(address);
    setPopularity(popularity);
    mIsFavorite = isFavorite;
    mIsVisible = isVisible;
    mCtx = ctx;
}

应用代码:

public class FragmentBaseGridActivity extends AbsListViewBaseActivity {

private ArrayList<Theme> mThemes;

private void refreshGrid() {
    mThemes = mComparator.compare(mSortType, mSortAorD, true, mThemes);
    ImageAdapter ad = (ImageAdapter) listView.getAdapter();
    ad.notifyDataSetChanged(); 
    }

public class Theme extends BaseTheme{

public String mStyle;

public Theme(int themeID, String name, String creator, String date, String style, String address, Boolean favorite, 
        Boolean visible, int popularity, Context ctx) {
    super(themeID, name, creator, date, address, favorite, visible, popularity, favorite, visible, ctx);

}
4

0 回答 0