前提・実現したいこと
BoomMenuを使用して、Androidアプリケーションを作成しようとしています。
(https://github.com/Nightonke/BoomMenu)
使用方法など調べるとJavaのサンプルコードしかヒットしませんが、
Kotlinでも既存のライブラリは使用できる認識だったためチャレンジしました。
発生している問題
UI起動時に、Null参照で失敗します。
XML
1<!-- BoomMenuを配置 --> 2 <com.nightonke.boommenu.BoomMenuButton 3 android:id="@+id/bmb" 4 android:layout_width="wrap_content" 5 android:layout_height="wrap_content" 6 android:layout_gravity="center" 7 />
Kotlin
1public class ButtonAreaFragment : Fragment() { 2 3 override fun onCreateView(inflater: LayoutInflater, 4 container: ViewGroup?, 5 savedInstanceState: Bundle?): View? { 6 super.onCreateView(inflater, container, savedInstanceState) 7 8 // FragmentのViewModel生成と、DataBindingを行う 9 val binding = DataBindingUtil.inflate<FragmentButtonareaBinding>( 10 inflater, 11 R.layout.fragment_buttonarea, 12 container, 13 false 14 ) 15 binding.viewModel = ButtonAreaFragmentViewModel() 16 17 if (savedInstanceState == null) { 18 // BoomButtonのタイプを設定する 19 // ★☆★XMLで作成したはずの”bmb”がnullとなってしまう 20 bmb.setButtonEnum(ButtonEnum.TextInsideCircle) 21 bmb.setPiecePlaceEnum(PiecePlaceEnum.DOT_3_1) 22 bmb.setButtonPlaceEnum(ButtonPlaceEnum.SC_3_3) 23 24 // BoomButtonの中身のアイコンとイベントリスナーを設定する 25 bmb.addBuilder( 26 TextInsideCircleButton.Builder() 27 .normalImageRes(R.drawable.p) 28 .normalTextRes(R.string.p) 29 .listener(Listener()) 30 ) 31 } 32 33 return binding.root 34 } 35} 36
試したこと
以下のように、XMLではなくコード上からインスタンスを生成しても失敗しました。
Kotlin
1public class ButtonAreaFragment : Fragment() { 2 3 override fun onCreateView(inflater: LayoutInflater, 4 container: ViewGroup?, 5 savedInstanceState: Bundle?): View? { 6 ~略~ 7 if (savedInstanceState == null) { 8 // ☆★☆ここでインスタンスを作成 9 var bmb: BoomMenuButton = BoomMenuButton(this.context) 10 ~略~ 11 // ☆★☆ここでhoge(XML上で定義したレイアウトのID)に追加 12 // ※アプリが落ちる 13 hoge.addView(bmb) 14 } 15 16 return binding.root 17 } 18}
Gradleの設定は以下の通りです。
gradle
1dependencies { 2 ~略~ 3 implementation 'com.nightonke:boommenu:2.1.1' 4}
そもそもJavaのライブラリはKotlinで使えないのでしょうか?
BoomMenu固有の問題が起きているのでしょうか??
おしゃれなUIなので何とかKotlinで使ってみたいです。
ご教授お願いいたします。
あなたの回答
tips
プレビュー