realm / realm-java

Realm is a mobile database: a replacement for SQLite & ORMs
http://realm.io
Apache License 2.0
11.46k stars 1.75k forks source link

Only use this adapter with managed RealmCollection, for un-managed lists you can just use the BaseRecyclerViewAdapter #5623

Closed alexei-28 closed 6 years ago

alexei-28 commented 6 years ago

Here my adapter:

public abstract class PreviewSortRealmAdapter extends RealmRecyclerViewAdapter {

    public PreviewSortRealmAdapter(Context context, @Nullable OrderedRealmCollection data, boolean autoUpdate) {
        super(data, true);
        setHasStableIds(true);
        this.context = context;
    }
}

Here how I create data:

public static OrderedRealmCollection<PointOfSaleListItem> getPointOfSaleListItem(Realm realm, Bundle filter, String sortByFieldName) {
        OrderedRealmCollection<PointOfSaleListItem> pointOfSaleListItemsCollection = new RealmList<>();
        RealmResults<Merchant> merchantsRealmResults = getMerchants(realm, filter, sortByFieldName);
        for (Merchant merchant : merchantsRealmResults) {
            PointOfSaleListItem pointOfSaleListItem = new PointOfSaleListItem();
            pointOfSaleListItem.setMerchantImageUrl(merchant.getPreview().getFormats().getReference().getUrl());
            RealmList<PointOfSale> pointOfSaleRealmList = merchant.getPointsOfSale();
            for (PointOfSale pointOfSale : pointOfSaleRealmList) {
                pointOfSaleListItem.setPointOfSale(pointOfSale);
                pointOfSaleListItemsCollection.add(pointOfSaleListItem);
            }
        }
        return pointOfSaleListItemsCollection;
    }

But I get error:

java.lang.IllegalStateException: Only use this adapter with managed RealmCollection, for un-managed lists 
you can just use the BaseRecyclerViewAdapter
    at io.realm.RealmRecyclerViewAdapter.<init>(RealmRecyclerViewAdapter.java:74)
    at com.myprject.android.customer.ui.adapter.PreviewSortRealmAdapter.<init>(PreviewSortRealmAdapter.java:35)
    at com.myprject.android.customer.ui.adapter.PointOfSaleListItemSortRealmAdapter.<init>(PointOfSaleListItemSortRealmAdapter.java:19)
    at com.myprject.android.customer.ui.PointOfSaleListItemsFragmentSort.createSortAdapter(PointOfSaleListItemsFragmentSort.java:27)
    at com.myprject.android.customer.ui.FragmentSort.init(FragmentSort.java:99)
    at com.myprject.android.customer.ui.FragmentSort.onCreateView(FragmentSort.java:70)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2354)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809)
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799)
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367)
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
    at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2199)
    at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:651)
    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:145)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:1236)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:1084)
    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1614)
    at android.view.View.measure(View.java:15848)
    at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:1028)
    at android.view.View.measure(View.java:15848)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:15848)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    at android.view.View.measure(View.java:15848)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:15848)
    at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1060)
    at android.view.View.measure(View.java:15848)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
    at android.view.View.measure(View.java:15848)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    at android.view.View.measure(View.java:15848)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:15848)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:58
Zhuinden commented 6 years ago

new RealmList<>() creates an unmanaged collection, you can only use RealmRecyclerViewAdapter with RealmResults, or RealmList obtained from a managed RealmObject.

alexei-28 commented 6 years ago

Is it possible to convert RealmList(unmanaged collection) to RealmResults? If not than I have only one solution. Use standard RecyclerView.Adapter Is I'm right?

Zhuinden commented 6 years ago

If you can't express your result set with RealmQuery, then yes