如何在Kotlin制作双向转换器? (在java工作)

问题描述 投票:3回答:1

我收到此错误:

错误:(32,50)无法在类br.com.martinlabs中找到方法indexFromModel(android.databinding.ObservableList <br.com.martinlabs.usecase.model.GrupoDoPrincipal>,br.com.martinlabs.usecase.model.GrupoDoPrincipal) .usecase.viewtools.Converters

但是我在Converters上有这个方法:(我已经尝试了一个带有伴随对象的类)

object Converters {

    fun indexFromModel(list: ObservableList<GrupoDoPrincipal>, model: GrupoDoPrincipal): Int {
        return list.indexOfFirst { it?.id == model?.id }
    }

    @InverseMethod("indexFromModel")
    fun indexToModel(list: ObservableList<GrupoDoPrincipal>, index: Int): GrupoDoPrincipal {
        return index.let { list[it] }
    }

}

用法:

<Spinner
    android:selectedItemPosition="@={Converters.indexFromModel(vm.allGrupoDoPrincipal, vm.principal.grupoDoPrincipal)}"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

这个方法适用于Java:

public static int indexFromModel(ObservableList<GrupoDoPrincipal> list, GrupoDoPrincipal model) {
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).getId() == model.getId()) {
            return i;
        }
    }

    return -1;
}

@InverseMethod("indexFromModel")
public static GrupoDoPrincipal indexToModel(ObservableList<GrupoDoPrincipal> list, int index) {
    return list.get(index);
}
android kotlin converter android-databinding
1个回答
2
投票

在Kotlin object方法不是真正的static。要使其静态,您需要为此方法添加注释@JvmStatic

object Converters {

    @JvmStatic
    fun indexFromModel(list: ObservableList<GrupoDoPrincipal>, model: GrupoDoPrincipal): Int {
        return list.indexOfFirst { it?.id == model?.id }
    }

    @JvmStatic
    @InverseMethod("indexFromModel")
    fun indexToModel(list: ObservableList<GrupoDoPrincipal>, index: Int): GrupoDoPrincipal {
        return index.let { list[it] }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.