2017-08-23 19 views
1

たとえば、JavaとKotlinアクティビティのBottomNavigationView機能を持つBaseActivity(Java)を維持する方法があるかどうかを知りたいと思います。将来的には、新しいアクティビティがKotlinで開発されたので、(いくつかの)JavaアクティビティをKotlinに変えようと考えています。 問題は、Kotlinがnullとして再生され、BottomNavigationViewの読み込みがJavaのようにループが維持された後に行われるため、JavaがBottomNavigationViewを正しく作成できることです。 もう1つの試みは、Java BaseActivityをKotlinに変えようと試みることでしたが、さまざまなJavaアクティビティの操作を壊しました。あなたのサブクラスのそれぞれであなたの基底クラスへUnbinderJavaでBaseActivityをKotlinアクティビティと互換性を維持する

protected Unbinder mUnbinder; 

そしてを追加

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()) { 

      //... 

     } 

    } 

} 

答えて

1

てみてください、mUnbinder

mUnbinder = ButterKnife.bind(this); 

This linkが問題を論じて設定します。完了したら(nullをチェックした後)、ベースクラスのUnbinderを呼び出します。

完全なKotlinの実装に進むと、おそらくバターナイフを完全に落とすことができます。

1

なぜ単にKotlin Android Bindingを使用しないのですか? Kotlinからの拡張機能は、ビジネスロジックを妨げるための "bindView"またはfindViewByIdコードなしでビューをバインドするのに役立ちます。

をご覧ください。 https://kotlinlang.org/docs/tutorials/android-plugin.html

0

ありがとう@Lesと@Daryl Sze! エクステンションとUnbinderの結合は、アクティビティJavaと同じ動作を実現しました!

this.mUnbinder = ButterKnife.bind(this) 

apply plugin: 'kotlin-android' 
apply plugin: 'android-apt' 
apply plugin: 'kotlin-android-extensions' 
関連する問題