在 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 应用程序中,否则您将遇到一个问题,即 。您可以通过使用 kotlin 代码库创建额外的活动来做到这一点,Android Studio 将自动处理 gradle 更改。之后您可以删除额外的活动:-)【参考方案2】:

类似这样的::

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中使用Kotlin库

我可以使用第三方 Java 库 (.jar) 来使用 Kotlin 进行 Android 开发吗?

如何将 java 库添加到 kotlin 本机

用 Kotlin 编写的 Android 库,提供对 Java 应用程序的支持

用 Kotlin 编写的 Android 库,提供对 Java 应用程序的支持

在库模块中使用 Kotlin,而不在 app 模块中使用它