在 Java 中使用 Kotlin 库
Posted
技术标签:
【中文标题】在 Java 中使用 Kotlin 库【英文标题】:Using Kotlin Library in java 【发布时间】:2019-08-20 02:14:41 【问题描述】:我正在尝试在 android Studio 中使用 GitHub 库 (MeowBottomNavigation)。但它是用 kotlin 编写的,我无法使用其中的侦听器。 唯一给出的就是这个
bottomNavigation.setOnShowListener
bottomNavigation.setOnClickMenuListener
建议显示使用
(功能1)
我不确定如何在 java 中实现这一点。任何帮助将不胜感激。
我熟悉 java,但该库是用 Kotlin 编写的。有没有办法在java中使用这些监听器?
bottomNavigation.setOnClickMenuListener(new
Function1<MeowBottomNavigation.Model, Unit>()
@Override
public Unit invoke(MeowBottomNavigation.Model p1)
int i = p1.getId();
switch (i)
case 4:
Toast.makeText(UserMainActivity.this, i, Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(UserMainActivity.this, i, Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(UserMainActivity.this, i, Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(UserMainActivity.this, i, Toast.LENGTH_SHORT).show();
break;
return Unit.INSTANCE;
);
【问题讨论】:
听起来很像***.com/q/44301301/4636715,除了那里提到了setOnClickListener
。可能会给你一个线索。
我不熟悉 kotlin 我想在 java 中实现它。问题是监听器没有正文和建议显示(Function1 super Model, Unit>)我不知道如何使用这个在java中。
此链接可能会有所帮助:How to convert a kotlin source file to a java source file
【参考方案1】:
Function0, Function1, Function2, ... FunctionN 是 kotlin 中的高阶函数。
转换为 java 后,您的点击监听器变为如下所示。
// Set Menu Click Listener
bottomNavigation.setOnClickMenuListener(new Function1<MeowBottomNavigation.Model, Unit>()
@Override
public Unit invoke(MeowBottomNavigation.Model p1)
return Unit.INSTANCE;
);
// Set Menu Show listener
bottomNavigation.setOnShowListener(new Function1<MeowBottomNavigation.Model, Unit>()
@Override
public Unit invoke(MeowBottomNavigation.Model s)
return Unit.INSTANCE;
);
【讨论】:
但是我如何在这里访问点击事件。我尝试使用 int i = p1.getId();然后尝试吐司来显示值。但它显示错误 android.content.res.Resources$NotFoundException: String resource ID #0x4 请看上面我已经更新了代码请告诉我哪里错了。 另外,您应该将 kotlin 依赖项添加到您的 java 应用程序中,否则您将遇到一个问题,即类似这样的::
bottomNavigation.setOnShowListener( new IBottomNavigationListener(Model model)
);
【讨论】:
无法解析符号 IBottomNavigationListener & Model【参考方案3】:如果您使用的是片段
//1.-在你的活动中全局声明片段
private HomeFragment homeFragment = new HomeFragment();
//2.- 声明一个在片段之间切换的方法
public void loadFragment(Fragment fragment)
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.yourFragmentContainer,fragment);
transaction.commit();
//3.-在Set Menu Click/show Listener调用片段来显示
// Set Menu Click Listener
bottomNavigation.setOnClickMenuListener(new Function1<MeowBottomNavigation.Model, Unit>()
@Override
public Unit invoke(MeowBottomNavigation.Model model)
int i = model.getId();
switch (i)
case 1:
loadFragment(homeFragment);
break;
//...other cases
return Unit.INSTANCE;
);
// Set Menu Show listener
bottomNavigation.setOnShowListener(new Function1<MeowBottomNavigation.Model, Unit>()
@Override
public Unit invoke(MeowBottomNavigation.Model model)
int i = model.getId();
switch (i)
case 1:
loadFragment(homeFragment);
break;
//...other cases
return Unit.INSTANCE;
);
【讨论】:
【参考方案4】:使用 实现 'com.etebarian:meow-bottom-navigation-java:1.2.0'
查看详情 https://www.youtube.com/watch?v=MiphbOtSyWY
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review以上是关于在 Java 中使用 Kotlin 库的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用第三方 Java 库 (.jar) 来使用 Kotlin 进行 Android 开发吗?
用 Kotlin 编写的 Android 库,提供对 Java 应用程序的支持