没有公共的RealmResults<E>构造函数?

4
我有一个包含“Realm Objects”的表,它们被称为“Foo”。Foo的其中一列指向另一个Realm Object,即Bar。我想查询Foo表,并挑选出所需的所有Bar对象,然后将它们添加到RealmBaseAdapter中。
然而,据我所知,RealmBaseAdapter在其构造函数中仅需要RealmResults列表。那么,我如何形成一个BarRealmResults而不查询Bar表?或者,我如何查询Foo表并返回一个BarRealmResults
例如,假设您有一个产品表和产品分段表,例如,Rice Krispies、Corn Flakes和Fruit Loops都属于麦片产品分段。我希望通过某些规格查询产品表,并列出包含在结果中的所有产品分段。

@bot 确实如此。更明确地说,Foo有一个Bar。但是Bar不知道哪些Foo将其作为自己的Bar。 - Michael Alan Huff
不是很清楚。这不是我的专业领域。顺便问一下,如果在你现有的代码中查询一个 Foo,你是否会自动得到一个 Bar 的值,还是 Bar 是空的? - Chetan Kinger
1
考虑到你似乎通过创建新的适配器解决了这个问题,你能否回答一下你的问题并展示解决方案呢?为了Stack Overflow的缘故 :) - EpicPandaForce
1
@epicpandaforce,明天第一件事就会做。 - Michael Alan Huff
1
@EpicPandaForce,已完成 :) - Michael Alan Huff
显示剩余7条评论
2个回答

4

由于没有直接的方法来完成这项任务,我最终自己制作了适配器。

 public class BarAdapter extends ArrayAdapter<Bar>  {

      //code to instantiate the adapter, inflate views, etc

 }

这部分很简单,唯一需要工作的是从Foo-->Bar中精心制作一个查询来获取我想要的结果。最终查询看起来像这样,

    // where fooType was what I wanted to ween out the Foo results on before
    // selecting Bar objects.
    RealmQuery<Foo> fooRealmQuery = realm
            .where(Foo.class)
            .equalTo("fooType", "desired type")
            .or()
            .equalTo("fooType", "other type");
    RealmResults<Foo> fooList = fooRealmQuery.findAll();

    List<Bar> barList = new ArrayList<Bar>();
    for (Foo foo : fooList) {

        Bar bar = foo.getBar();

        if (!barList.contains(bar)) {
            barList.add(bar);
            Log.d(TAG, "added " + bar.getName());
        } else {
            Log.d(TAG, "I already had that bar");
        }
    }

    adapter = new BarAdapter(this, barList);
    listView.setAdapter(adapter);

现在一切正常运行。此外,Realm的速度足够快,我可以在创建适配器时立即查询,并且没有性能延迟 :)


0

您所询问的目前无法使用当前的RealmBaseAdapter实现,至少如果您想要显示来自Foo查询的Bar对象的话。

如果您不想从Bar到Foo维护关系,我建议创建您的RealmAdapter,在其中能够过滤您想要显示的Bar对象的Foo查询。 RealmBaseAdapter包含非常少的代码,因此应该很容易进行自定义:RealmBaseAdapter.java


谢谢你,Christian!我最终选择了另一个解决方案。不过,如果你能发布一些关于你所说的内容的示例代码,我会很乐意接受你的答案。 - Michael Alan Huff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接