我正在尝试用 Java 编写下面用 Kotlin 编写的代码。我无法创建 DefaultElementsAdapter,因为我无法正确使用语法。
HtmlRecycler.Builder(this@MainActivity)
.setSource(networkSource)
.setAdapter(DefaultElementsAdapter(this@MainActivity) { element, i, view ->
}})
.setRecyclerView(recyclerView)
.setLoadingCallback(object : HtmlRecycler.LoadCallback {
override fun onLoadingStart() {
progressBar.visibility = View.VISIBLE
}
override fun onLoaded(document: Document?) {
progressBar.visibility = View.GONE
}
})
.build()
我无法获得正确的 Java 代码
DefaultElementsAdapter adapter = new DefaultElementsAdapter(this,
/****How to create the kotlin adapter here****/
);
HtmlRecycler.Builder builder = new HtmlRecycler.Builder(this);
builder.setSource(new StringSource(item.contentDescription))
.setRecyclerView(recyclerView)
.setAdapter(adapter)
.build();
Kotlin 类是这样的
public final class DefaultElementsAdapter public constructor(context: android.content.Context, onClick: (m7mdra.com.htmlrecycler.elements.Element, kotlin.Int, android.view.View) -> kotlin.Unit) : m7mdra.com.htmlrecycler.adapter.ElementsAdapter {
private final val context: android.content.Context /* compiled code */
private final val onClick: (m7mdra.com.htmlrecycler.elements.Element, kotlin.Int, android.view.View) -> kotlin.Unit /* compiled code */
public open fun onBindElement(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: kotlin.Int): kotlin.Unit { /* compiled code */ }
public open fun onCreateElement(parent: android.view.ViewGroup, elementType: m7mdra.com.htmlrecycler.elements.ElementType): androidx.recyclerview.widget.RecyclerView.ViewHolder { /* compiled code */ }
}
DefaultElementAdapter
构造函数期望它的第二个参数是 type 的函数(Element, Int, View) -> Unit
,这意味着它必须接受 3 个参数,Element
, Int
(int
或Integer
在 Java 中) and View
,并且不返回任何内容。
如果您在 Android 项目中启用了 Java 8 支持,则可以使用 lambda 表达式提供所需的函数:
DefaultElementsAdapter adapter = new DefaultElementsAdapter(this, (element, i, view) -> {
// your code
return Unit.INSTANCE;
});
如果你没有 Java 8 支持并且不能使用 lambdas,你总是可以创建一个Function3
对象:
DefaultElementsAdapter adapter = new DefaultElementsAdapter(this, new Function3<Element, Integer, View, Unit>() {
@Override
public Unit invoke(Element element, Integer integer, View view) {
// your code
return Unit.INSTANCE;
}
});
请注意,不幸的是,Unit.INSTANCE
在这两种情况下,您都必须使用 Java返回。这种需求背后的原因已经在这里解释了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句