Проблемы при использовании Android Room вместе с Майком Пензом Фастадаптером - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь использовать Mike Penz Fastadapter. Согласно ReadMe , первым шагом является создание класса модели, который расширяет "AbstractItem" из его библиотеки. Я сделал это в своем классе сущностей Room, потому что это элемент, который я хочу иметь в представлении реселлера:

    @Entity(tableName = "Category")
public class Cat extends AbstractItem<Cat, Cat.ViewHolder> {

    @PrimaryKey
    @NonNull
    @ColumnInfo(name = "CID")
    public String uid;

    public String getID() { return this.uid; }


    @ColumnInfo(name = "HeadID")
    public String iHeaduid;

    //...various getters and setters...

    public Cat() {}

    public Cat(String sNameP, int iCatLevelP, Cat oHeadCatP)
    {
        this.uid = UUID.randomUUID().toString();
        this.sName = sNameP;
        this.oSubCatList = new ArrayList<Cat>();
        this.iCatLevel = iCatLevelP;
        this.oHeadCat = oHeadCatP;
        if (this.oHeadCat != null) {
            this.sHeadName = oHeadCatP.sName;
            this.iHeaduid = oHeadCatP.uid;
        }
        else
            this.sHeadName = null;
    }

// Methods that implement AbstractItem - I already set them on ignore...

    @Ignore
    @Override
    public int getType() {
        return R.id.textViewCat;
    }

    @Ignore
    @Override
    public int getLayoutRes() {
        return R.layout.catrecyclerview_item;
    }

    @Ignore
    @Override
    public void bindView(ViewHolder holder) {
        super.bindView(holder);
    }

    protected static class ViewHolder extends RecyclerView.ViewHolder{

        protected TextView oTextView;
        public ViewHolder(View itemView) {
            super(itemView);
            oTextView = itemView.findViewById(R.id.textViewCat);
        }
    }
}

Моя сущность, которая раньше работала нормально, теперь выдает ошибки компиляции:

enter image description here

Похоже, что при использовании Room на расширенных объектах возникают проблемы, как предполагает этот связанный вопрос . Это довольно обидно, так как Fastadapter был бы хорошим решением для расширяемых N-уровня. Есть идеи, как решить эту проблему? Могу ли я использовать комнату с Fastadaper?

Я мог бы скопировать список элементов в класс модели-заглушки, не являющийся базой данных, но мне это показалось бы неэффективным, и я добавил бы раздувной код для синхронизации базы данных с заглушкой ...

Идеи приветствуются: -)

1 Ответ

0 голосов
/ 02 сентября 2018

Я выяснил, в чем проблема: это был приемный класс в DAO. Если класс модели расширен, дополнительные поля суперкласса должны быть заданы как информация столбца или получить тег @Ignore, в противном случае они являются неполной сущностью Room и расширенный класс не сможет получить запрос Room.

AbstractItem, хотя и является библиотечным классом и доступен только для чтения. Поэтому я скопировал содержимое в класс с другим именем («MyAbstractItem» f.i.) и поместил теги @Ignore в дополнительные поля. Номер перестал жаловаться.

Я не знаю, есть ли более элегантное решение, знаете ли вы его?

Редактировать: Хороший ответ здесь:

Комната Android: можно ли использовать параметры ограниченного типа в сущности?

...