【Kotlin】FragmentのListViewをActivityで呼び出す
表示領域を確保
activity_main_list.xmlをConstraintLayoutで見ると以下のようになっています。
- 表示させたい領域にFrameLayoutを追加
- FrameLayoutのIDを設定(例ではframeIDとしています)
Fragmentを追加
fragment_main_list.xmlをConstraintLayoutで見ると以下のようになっています。

fragment_main_list.xmlにListViewを追加- ListVIewのIDを設定(例では
listViewIDとしています)
MainListFragment.kt
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ListView
class MainListFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val mainFrame = inflater!!.inflate(R.layout.fragment_main_list, container, false)
val listView = mainFrame.findViewById(R.id.listViewID) as ListView
val dataArray = arrayOf("kotlin", "Android", "Swift", "iOS")
val adapter = ArrayAdapter<String>(this.context, android.R.layout.simple_list_item_1, dataArray)
listView.adapter = adapter
return mainFrame
}
}
ポイントはfindViewByIdの前に変数mainFrameにMainListActivityのFrameLayoutのインスタンスを挿入しています。
また、戻り値もそのmainFrameを返却します。
MainListActivityからFragmentを呼び出す
MainListActivity.kt
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.design.widget.TabLayout
class MainListActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_list)
this.setActionBar()
this.replaceFragment()
}
// MARK: - Privates
private fun setActionBar() {
supportActionBar?.title = "新潟永住計画"
supportActionBar?.setIcon(R.mipmap.h_logo)
// ActionBarの影をなくす
supportActionBar?.elevation = 0F
supportActionBar?.setDisplayShowHomeEnabled(true)
}
private fun replaceFragment() {
val transaction = supportFragmentManager.beginTransaction()
val mainFragment = MainListFragment()
transaction.replace(R.id.frameID, mainFragment)
transaction.commit()
}
}
supportFragmentManagerのbeginTransaction()でtransactionを生成replaceのパラメータに表示領域のframeIDとMainListFragmentのインスタンスを渡して.commit()※transaction.add()でもいいのですが、.replaceはFragmentが存在しない場合はaddし、既に存在する場合はremoveしてaddするので基本replaceでいい。

Kotlinスタートブック -新しいAndroidプログラミング
- 作者: 長澤太郎
- 出版社/メーカー: リックテレコム
- 発売日: 2016/07/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る

Androidアプリ開発のためのKotlin実践プログラミング
- 作者: 船曳崇也
- 出版社/メーカー: 秀和システム
- 発売日: 2017/12/26
- メディア: 単行本
- この商品を含むブログ (1件) を見る

黒帯エンジニアが教えるプロの技術 Android開発の教科書(ヤフー黒帯シリーズ)
- 作者: 筒井俊祐,里山南人,松田承一,笹城戸裕記,毛受崇洋
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/06/18
- メディア: 単行本
- この商品を含むブログを見る