20190415のKotlinに関する記事は2件です。

java kotlin IntとIntの除算(割り算)にご注意

なんでこんな簡単なことにハマったのでしょう?
私と同じようにハマって時間を無駄にする方がいないように備忘録

下記は当然の如く0.25と出ると思っていましたが...

        var rate: Double = 0.0
        rate = 1 / 4
        Log.v("TEST:", "rate:${rate}")

下記のようなコンパイルエラーがでる。

Type mismatch: inferred type is Int but Double was expected

google翻訳様:「型が一致しません:推定型はIntですがDoubleが必要です」

そんなことわかっておるワイ!!!

ん? あっ Σ(゚д゚;) ,,,, そういう事か。
IntとIntの計算なので計算結果の型の判定がIntになっていたんですね...
俺よ、なぜ気づかなかった。。。

ということで解決策。どっちか、もしくは両方をDoubleに合わせてやればよい。

        val num1 = 1.toDouble()
        val num2 = 4.toDouble()

        val aaa = num1 / num2

        Log.v("TEST:", "rate = ${aaa}")
V/TEST:: rate = 0.25

はい。想定どおりの結果が返ってきました。
自分の頭の悪さに涙が止まらんです。

補足

ちなみに...

        val aaa = (1/4).toDouble()
        Log.v("TEST:", "rate = ${aaa}")
V/TEST:: rate = 0.0

こうすると 計算結果がIntで来てそれをDoubleに変換しているみたいになるから
想定する結果が返ってきません。
10 / 4 とかだと 2.0 になるから注意。

では、よい kotlin 生活を!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

BottomSheetDialogFragmentで全画面表示だけ有効にしたい

目的

BottomSheetDialogFragmentで全画面表示だけ有効にしたい

コード

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

    val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog

    dialog.setOnShowListener { dialog ->
        val d = dialog as BottomSheetDialog

        val bottomSheet = d.findViewById(com.google.android.material.R.id.design_bottom_sheet) as FrameLayout?
        val behavior = BottomSheetBehavior.from(bottomSheet)
        behavior.state = BottomSheetBehavior.STATE_COLLAPSED

        behavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
            override fun onSlide(bottomSheet: View, slideOffset: Float) {
                //何もしない
            }

            override fun onStateChanged(bottomSheet: View, newState: Int) {
                //この条件分岐追加しないと画面が消えた後モーダルの半透明黒マスクだけが残る
                if (newState == BottomSheetBehavior.STATE_HIDDEN) {
                    dismiss()
                    behavior.state = BottomSheetBehavior.STATE_COLLAPSED
                }
                //途中で止まろうとするので強制的に全画面表示する
                else if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
                    behavior.state = BottomSheetBehavior.STATE_EXPANDED
                }
            }
        })

        //下から出てきて全画面表示されるようにする
        behavior.state = BottomSheetBehavior.STATE_EXPANDED
    }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む