小编joh*_*crq的帖子

Android Kotlin Realm 查询+更新异步的正确方法

我最近遇到一个问题,我在内存中有一个对象的 RealResult 列表,并在视图中显示它。isDeleted用户单击后,当前显示的项目应在领域(属性)中标记为已删除

所以我只是从惰性RealmResults列表中获取该对象,打开一个事务并将其标记为已删除。由于 RealmResults 是自动更新的,我有一个绑定到notifityDataSetChanged. 除了这个警告之外,一切正常:

Mixing asynchronous queries with local writes should be avoided. Realm will convert any async queries to synchronous in order to remain consistent. Use asynchronous writes instead
Run Code Online (Sandbox Code Playgroud)

这是有问题的,因为我的列表很大,而且我不希望查询变成sync. 我是这样解决的,不知道这样对不对。我没有将项目对象提供给更新函数,而是提供了对象的 id,然后执行以下操作:

Realm.getDefaultInstance().use { realm ->

            realm.executeTransactionAsync {
                // find the item
                realm.where(ItemRealm::class.java)
                        .equalTo(ItemRealm.ID, itemId).findFirstAsync()
                        .addChangeListener(object : RealmChangeListener<ItemRealm> {
                            override fun onChange(element: ItemRealm) {
                                element.deleted = true
                                element.removeChangeListener(this)
                            }
                        })
            }
        }
Run Code Online (Sandbox Code Playgroud)

我不确定的问题是async异步事务内的查询部分。

编辑。实际上,它抛出java.lang.IllegalStateException: Realm …

android realm kotlin

3
推荐指数
1
解决办法
3858
查看次数

Kotlin嵌套对象类

好的,所以我现在开始学习kotlin一周了,我喜欢这种语言:p除了扩展功能的强大功能之外,我觉得他们缺乏创建像java实用程序类(xxxUtil)这样的命名空间的正确方法.

我最近开始使用这个方法,我不确定是否正确,我想要Kotlin经验丰富的用户的一些反馈.

这是一个有效和正确的事情:

object RealmDb {

   private val realmInstance by lazy{ Realm.getInstance(MainApplication.instance) }

   private fun wrapInTransaction(code:() -> Unit){
       realmInstance.beginTransaction();
       code.invoke()
       realmInstance.commitTransaction();
}
   object NormaNote{
      fun create(...) {...}
      fun update(...) {...}
   }
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我想将一些NormalNote值更新为Realm数据库时,我会执行以下操作:

RealmDb.NormaNote.create(title.text.toString(), note.text.toString())
Run Code Online (Sandbox Code Playgroud)

这是常见的事吗?有更好的方法吗?据我所知,这是单例嵌套,我不认为这有任何问题,我只是不喜欢把像DB操作这样的常见事情放在需要实例化的类中.在旧的java中,我选择了静态类

database singleton kotlin

2
推荐指数
1
解决办法
1086
查看次数

TreeMap 上的 Kotlin sortBy

实现这一点的 kotlin 方式是什么:

public static TreeMap<Integer, ArrayList<HomeItem>> getHomeItemListsSeparatedByPageId(List<HomeItem> homeItemsList) {

        if (homeItemsList.size() == 0) {
            return new TreeMap<>();
        }

        TreeMap<Integer, ArrayList<HomeItem>> map = new TreeMap<>();

        for (HomeItem hl : homeItemsList) {
            if (map.get(hl.getVisiblePageId()) == null) {
                map.put(hl.getVisiblePageId(), new ArrayList<>());
            }
            map.get(hl.getVisiblePageId()).add(hl);
        }

        return map;
    }
Run Code Online (Sandbox Code Playgroud)

我试图在我的 args 列表上应用 groupBy,但它返回一个 HashMap。

编辑:基本上,原始列表被查询,它被分组visiblePageId,并添加到一个树图中,其键是 id,值是具有该 id 的项目

group-by treemap kotlin

2
推荐指数
1
解决办法
3094
查看次数

Kotlin扩展功能

考虑到这一点:

MyView.setVisibility(View.VISIBLE)
Run Code Online (Sandbox Code Playgroud)

可简化为:

inline fun View.setVisible() = apply { visibility = View.VISIBLE }

MyView.setVisible()
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以这样:

inline infix fun View.vis(vis: Int) = apply { visibility = vis }
MyView vis View.VISIBLE
Run Code Online (Sandbox Code Playgroud)

无论如何通过这样做完成相同的事情:

MyView.VISIBLE
Run Code Online (Sandbox Code Playgroud)

android kotlin extension-function

2
推荐指数
1
解决办法
362
查看次数

Android获取包装内容视图的高度膨胀为0dp

我正在制作动画,如果用户点击它,它将会增长视图.基本上,它是一张卡片,当点击它时,它会显示底部内容.为此,我正在扩展这样的动画:

Val collapseAnimation = object : Animation() {
            override fun applyTransformation(interpolatedTime: Float, t: Transformation?) {
                val interpolatedInverted = 1 - interpolatedTime

                val headerLp = headerImage.layoutParams
                headerLp.width = ...
                headerImage.layoutParams = headerLp
            }
        }
Run Code Online (Sandbox Code Playgroud)

问题是我需要将XML中定义的视图(wrap_content)的高度设置为0dp.基本上,我想长大一个从0dp到wrap_content的视图,为此我需要知道wrap_content大小是什么.

如何在不对视图大小进行硬编码的情况下以最有效的方式实现这一目标?

animation android android-animation layoutparams

2
推荐指数
1
解决办法
786
查看次数