【问题标题】:Using Kotlin Library in java在 Java 中使用 Kotlin 库
【发布时间】: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;
        }
    });

【问题讨论】:

标签: java android kotlin


【解决方案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
    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2020-03-23
    • 2022-11-28
    相关资源
    最近更新 更多