如何在Java编写的MainActivity中直接调用Anko组件类?
在Java的MainActivity中调用Kotlin编写的Anko登录视图
嘿,我来帮你搞定这个Java调用Kotlin Anko组件的问题~ 首先得理清几个关键的点,然后一步步来操作:
第一步:调整Kotlin的SingInView类,让它兼容Java调用
你原来的SingInView泛型绑定的是SingleInActivity,这会导致Java的MainActivity(继承AppCompatActivity)无法匹配类型。所以我们需要把泛型改成更通用的父类,同时确保类是公开的:
public class SingInView : AnkoComponent<AppCompatActivity> { override fun createView(ui: AnkoContext<AppCompatActivity>) = with(ui) { verticalLayout { lparams(width = matchParent, height = matchParent) textView("Member Login") editText { hint = "E-mail" } editText { hint = "PassWord" } button("Login") } } }
第二步:在Java的MainActivity中调用这个Anko组件
Java里没有Kotlin的with语法糖,但我们可以直接通过AnkoContext来创建视图,然后设置为Activity的内容视图。代码示例如下:
import android.os.Bundle; import android.view.View; import androidx.appcompat.app.AppCompatActivity; import org.jetbrains.anko.AnkoContext; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 创建AnkoContext,关联当前MainActivity AnkoContext<MainActivity> ankoContext = AnkoContext.create(this, this); // 实例化SingInView并生成对应的视图 View loginView = new SingInView().createView(ankoContext); // 将生成的登录视图设置为当前Activity的内容视图 setContentView(loginView); } }
额外注意事项
- 确保你的项目已经正确配置了Kotlin与Java混编,并且添加了Anko的必要依赖(比如
anko-appcompat-v7等),否则可能会出现找不到类的编译错误。 - 如果你的
SingInView是嵌套在其他Kotlin类中的,一定要把它改成顶层类或者添加public修饰符,否则Java代码无法访问到它。
内容的提问来源于stack exchange,提问作者hyunwookcho
相关产品推荐
相关产品推荐

