Kotlinでフラグメント

android.keicode.com を参考にKotlinに書き換えてみたものの、うまく行かず悩んでいたものがようやく実現できたのでメモ。

.javaの書き換え

引用元のコード

package com.keicode.android.test;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment {
  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment1, container, false);
  }
}

をKotlinにそのまま書き換えると以下のようになる。

package com.keicode.android.test

import android.app.Fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup

class Fragment1 : Fragment() {
  override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle): View? {
    return inflater.inflate(R.layout.fragment1, container, false)
  }
}

コードをこのように書き換え、XMLは変更せず実行してみると動かない。

解決法

そこで、

qiita.com

を参考にFragment1.ktを以下のように書き換えた。

package com.keicode.android.test

import android.support.v4.app.Fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup

public class Fragment1 : Fragment() {
  companion object {
    fun getInstance(): Fragment1 {
      return Fragment1()
    }
  }

  override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
    return inflater.inflate(R.layout.fragment1, container, false)
  }
}

変更した点は2つ

import android.app.Fragmentimport android.support.v4.app.Fragmentに変更

companion object {
  fun getInstance(): Fragment1 {
    return Fragment1()
  }
}

を追加

これを両方のFragment.ktに対して変更することで、正しく動作するようになった。

おわりに

フラグメント関係はandroid.support.v4.app.Fragment移ったのか。 でも、import android.app.Fragmentでもエラーはなく、コンパイルはできるし。 getInstanceは何をやってるメソッドなのか。

とかいろいろと気になる点はあれども、ひとまずはKotlinでフラグメントを実装することができた。
これらの疑問は追々調べていこう。
もしかしたら、無知の結果かもしくは元記事が2012年とかそこらなので、アップデートされていろいろと変わったのかもしれない。
手探り感がすごいので、しっかりと知識のある人に詳しく解説して貰いたいという気持ちが日に日に高まっていく。