【问题标题】:Keep BaseActivity in Java compatible with Kotlin Activity保持 Java 中的 BaseActivity 与 Kotlin Activity 兼容
【发布时间】:2017-08-23 10:56:04
【问题描述】:

我想知道是否有一种方法可以维护 BaseActivity (Java),例如,用于 Java 和 Kotlin 活动的功能性 BottomNavigationView。将来我打算将(几个)Java 活动变成 Kotlin,因为新的活动是在 Kotlin 中开发的。 问题是 Java 能够保持正确创建 BottomNavigationView,因为 Kotlin 播放为 null 并且 BottomNavigationView 加载是在 Java 中维护的循环之后进行的。 另一种尝试是尝试将我的 Java BaseActivity 转换为 Kotlin,但破坏了各种 Java Activity 的操作。

class KotlinActivity : BaseActivity() {

    public override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my_wishes_list)
        ButterKnife.bind(this)
        //bottomNavigationMenu is null and lost all configurations from the BaseActivity
        bottomNavigationMenu.menu.getItem(0).isChecked = true

    }

}


public class BaseActivity extends AppCompatActivity {

    @BindView(R.id.bottom_navigation_menu)
    protected BottomNavigationView bottomNavigationMenu;

    @Override
    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        setupBottomMenu();
    }

    private void setupBottomMenu() {

        if (bottomNavigationMenu != null) {

            BottomNavigationViewHelper.removeShiftMode(bottomNavigationMenu);

            bottomNavigationMenu.setOnNavigationItemSelectedListener(
                    new BottomNavigationView.OnNavigationItemSelectedListener() {
                        @Override
                        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                            setupBottomMenuListener(item);
                            return true;
                        }

                    });


        }

    }

    private void setupBottomMenuListener(@NonNull MenuItem item) {

        switch (item.getItemId()) {

           //...

        }

    }

}

【问题讨论】:

    标签: java android kotlin


    【解决方案1】:

    为什么不直接使用 Kotlin Android Binding? Kotlin 的扩展有助于绑定视图,无需任何“bindView”或 findViewById 代码干扰业务逻辑。

    看看。 https://kotlinlang.org/docs/tutorials/android-plugin.html

    【讨论】:

      【解决方案2】:

      感谢@Les 和@Daryl Sze! 加入扩展加 Unbinder 实现了与 Activity Java 相同的行为!

      this.mUnbinder = ButterKnife.bind(this)
      
      apply plugin: 'kotlin-android'
      apply plugin: 'android-apt'
      apply plugin: 'kotlin-android-extensions'
      

      【讨论】:

        【解决方案3】:

        尝试将Unbinder 添加到您的基类

        protected Unbinder mUnbinder;
        

        然后在你的每个子类中,设置mUnbinder

        mUnbinder = ButterKnife.bind(this);
        

        This link 讨论这个问题。完成后(在检查 null 之后),您将在基类中调用 Unbinder

        如果/当您使用完整的 Kotlin 实现时,您可能会完全放弃 Butter Knife。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-26
          • 2018-04-11
          • 1970-01-01
          • 2015-07-17
          • 2014-10-08
          • 1970-01-01
          • 1970-01-01
          • 2014-08-26
          相关资源
          最近更新 更多