2017-05-31 2 views
0

Ich war mit FastAdapter, weil es Spaß macht und entlastet mich vom Schreiben von Adapter-Klassen. Hier ist eine Klasse:Implementieren RealmModel während der Erweiterung AbstractItem

public class ProductsModel extends AbstractItem<ProductsModel, ProductsModel.ViewHolder> { 

Aber vor kurzem Ich möchte Realm statt SQLite verwenden. Also wollte ich dies tun:

public class ProductsModel extends AbstractItem<ProductsModel, ProductsModel.ViewHolder> implements RealmModel { 

Und vor jeder Transaktion ich tat dies:

RealmResults<ProductsModel> productsModels = realm.where(ProductsModel.class).findAll(); // <- this line is generating the exception 
if(productsModels.size() == 0){ //no product is saved, download now 

} 

Aber immer diese Ausnahme:

java.lang.IllegalArgumentException: AbstractItem is not part of the schema for this Realm 

Bitte sagen Sie mir, wie kann ich Realm verwenden mit FastAdapter.

+0

Ich benutze immer noch Realm und FastAdapter, sondern als Code über 'ProductsModel' ist kein Model in Realm, es ist ein ** Item **, das für den Artikel im Adapter steht. damit kann RealmModel nicht implementiert werden. Es ist nur Item, du musst dem Beispiel des Fastadapters folgen, um es zu tun. –

+0

Danke, kannst du bitte irgendein Beispiel/Tutorial teilen? Ich habe [das] nicht erhalten (https://github.com/mikepenz/FastAdapter/tree/develop/library-extensions-realm) –

+0

Sie können es von https://github.com/mikepenz/FastAdapter/tree/ erhalten entwickeln/app. Einfach alles bekommen und bauen. –

Antwort

2

Wenn Sie die AbstractItem nicht erweitern können, können Sie die IItem Schnittstelle IItem einfach implementieren. Sie werden die Funktionen implementieren müssen Sie bereits wissen, + diejenigen, die normalerweise durch die AbstractItem

umgesetzt werden würde, ist hier ein Beispiel Artikel:

public class SampleRealmItem extends RealmObject implements IItem<SampleRealmItem, SampleRealmItem.ViewHolder> { 
    // the identifier for this item 
    @PrimaryKey 
    protected long mIdentifier = -1; 

    @Override 
    public long getIdentifier() { 
     return mIdentifier; 
    } 

    // the tag for this item 
    @Ignore 
    protected Object mTag; 

    @Override 
    public Object getTag() { 
     return mTag; 
    } 

    // defines if this item is enabled 
    @Ignore 
    protected boolean mEnabled = true; 

    @Override 
    public boolean isEnabled() { 
     return mEnabled; 
    } 

    // defines if the item is selected 
    @Ignore 
    protected boolean mSelected = false; 

    @Override 
    public SampleRealmItem withSetSelected(boolean selected) { 
     this.mSelected = selected; 
     return this; 
    } 

    @Override 
    public boolean isSelected() { 
     return mSelected; 
    } 

    // defines if this item is selectable 
    @Ignore 
    protected boolean mSelectable = true; 

    @Override 
    public SampleRealmItem withSelectable(boolean selectable) { 
     this.mSelectable = selectable; 
     return this; 
    } 

    @Override 
    public boolean isSelectable() { 
     return mSelectable; 
    } 

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

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

    @Override 
    public View generateView(Context ctx) { 
     ViewHolder viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(getLayoutRes(), null, false)); 
     //as we already know the type of our ViewHolder cast it to our type 
     bindView(viewHolder, Collections.EMPTY_LIST); 
     //return the bound view 
     return viewHolder.itemView; 
    } 

    @Override 
    public View generateView(Context ctx, ViewGroup parent) { 
     ViewHolder viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(getLayoutRes(), parent, false)); 
     //as we already know the type of our ViewHolder cast it to our type 
     bindView(viewHolder, Collections.EMPTY_LIST); 
     //return the bound and generatedView 
     return viewHolder.itemView; 
    } 

    @Override 
    public ViewHolder getViewHolder(ViewGroup parent) { 
     return getViewHolder(LayoutInflater.from(parent.getContext()).inflate(getLayoutRes(), parent, false)); 
    } 

    private ViewHolder getViewHolder(View v) { 
     return new ViewHolder(v); 
    } 

    @Override 
    public void bindView(ViewHolder holder, List<Object> payloads) { 
     //set the selected state of this item. force this otherwise it may is missed when implementing an item 
     holder.itemView.setSelected(isSelected()); 
     //set the tag of this item to this object (can be used when retrieving the view) 
     holder.itemView.setTag(this); 

     //handle your binding 
    } 

    @Override 
    public void unbindView(ViewHolder holder) { 
     holder.name.setText(null); 
    } 

    @Override 
    public void attachToWindow(ViewHolder holder) {} 

    @Override 
    public void detachFromWindow(ViewHolder holder) {} 

    @Override 
    public boolean failedToRecycle(ViewHolder holder) { 
     return false; 
    } 

    @Override 
    public boolean equals(int id) { 
     return id == mIdentifier; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 
     AbstractItem<?, ?> that = (AbstractItem<?, ?>) o; 
     return mIdentifier == that.getIdentifier(); 
    } 

    @Override 
    public int hashCode() { 
     return Long.valueOf(mIdentifier).hashCode(); 
    } 

    protected static class ViewHolder extends RecyclerView.ViewHolder { 
     public ViewHolder(View view) { 
      super(view); 
     } 
    } 
} 

es zu vereinfachen, habe ich Kommentare entfernt und unnötige Etter . Eine vollständige Probe kann hier in der FastAdapter s Probenquelle zu finden: https://github.com/mikepenz/FastAdapter/blob/develop/app/src/main/java/com/mikepenz/fastadapter/app/items/RealmSampleUserItem.java

Falls Sie interessiert sind, hier können Sie die Standard AbstractItem Implementierung finden: https://github.com/mikepenz/FastAdapter/blob/develop/library-core/src/main/java/com/mikepenz/fastadapter/items/AbstractItem.java

+0

Kann 'OnClick' nicht implementieren. Kannst du bitte [hier] (https://gist.github.com/tariql-islam1/afbea341923d2c550f922194607513e3) sehen und mir sagen, was ich vermisse? –

+0

Ich verstehe nicht wirklich, was Sie versuchen zu tun. Das Modell hat keinen Zuhörer. Sie können einen an den FastAdapter anschließen. – mikepenz

+0

Können Sie sich bitte [diese SO-Frage] (https://stackoverflow.com/questions/44364540/implement-onclicklistener-on-fastadapter-implementing-iitem) ansehen? –

Verwandte Themen