Skip to content

Commit

Permalink
ActivityベースからFragmentベースへの移行
Browse files Browse the repository at this point in the history
  • Loading branch information
KazuyoshiHidaka committed Mar 7, 2020
1 parent bbdc6c9 commit 6e0c07f
Show file tree
Hide file tree
Showing 17 changed files with 335 additions and 148 deletions.
3 changes: 3 additions & 0 deletions app/build.gradle
Expand Up @@ -34,6 +34,9 @@ dependencies {
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation "androidx.cardview:cardview:1.0.0"
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation "androidx.navigation:navigation-fragment-ktx:2.2.1"
implementation "androidx.navigation:navigation-ui-ktx:2.2.1"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
Expand Down
32 changes: 11 additions & 21 deletions app/src/main/java/hidaka/kotlinstudy/todo/MainActivity.kt
Expand Up @@ -3,11 +3,9 @@ package hidaka.kotlinstudy.todo
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import hidaka.kotlinstudy.todo.fragment.MainFragment
import hidaka.kotlinstudy.todo.model.Page
import hidaka.kotlinstudy.todo.ui.PageNewActivity
import hidaka.kotlinstudy.todo.ui_component.PagesRecyclerViewComponent
import java.util.*

/// サンプルデータ
Expand All @@ -19,30 +17,22 @@ val pagesList: Array<Page> = arrayOf(

class MainActivity : AppCompatActivity() {

private lateinit var pagesRecyclerView: RecyclerView
private lateinit var pagesRecyclerViewComponent: PagesRecyclerViewComponent
private lateinit var floatingActionButton: FloatingActionButton

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

pagesRecyclerView = findViewById<RecyclerView>(R.id.main_recycler_view).also {
pagesRecyclerViewComponent =
PagesRecyclerViewComponent(pagesList, it.context, ::startActivity)

it.setHasFixedSize(true)
it.layoutManager = pagesRecyclerViewComponent.viewManager
it.adapter = pagesRecyclerViewComponent.viewAdapter
if (savedInstanceState == null) {
val fragment = MainFragment()
supportFragmentManager
.beginTransaction()
.add(R.id.main_fragment_host, fragment)
.commit()
}
floatingActionButton =
findViewById<FloatingActionButton>(R.id.main_floating_action_button).also {
it.setOnClickListener {
val intent = Intent(this, PageNewActivity::class.java)
startActivity(intent)
}
}
}

fun navigateToPageNew() {
val intent = Intent(this, PageNewActivity::class.java)
startActivity(intent)
}

}
60 changes: 60 additions & 0 deletions app/src/main/java/hidaka/kotlinstudy/todo/fragment/MainFragment.kt
@@ -0,0 +1,60 @@
package hidaka.kotlinstudy.todo.fragment

import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.Lifecycle
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import hidaka.kotlinstudy.todo.MainActivity
import hidaka.kotlinstudy.todo.R
import hidaka.kotlinstudy.todo.pagesList
import hidaka.kotlinstudy.todo.ui.PageNewActivity
import hidaka.kotlinstudy.todo.ui_component.PagesRecyclerViewComponent

/**
* A simple [Fragment] subclass.
*/
class MainFragment : Fragment() {

private lateinit var pagesRecyclerView: RecyclerView
private lateinit var pagesRecyclerViewComponent: PagesRecyclerViewComponent
private lateinit var floatingActionButton: FloatingActionButton

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_main, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

pagesRecyclerView = view.findViewById<RecyclerView>(R.id.main_recycler_view).also {
pagesRecyclerViewComponent =
PagesRecyclerViewComponent(pagesList, it.context, ::startActivity)

it.setHasFixedSize(true)
it.layoutManager = pagesRecyclerViewComponent.viewManager
it.adapter = pagesRecyclerViewComponent.viewAdapter
}
floatingActionButton =
view.findViewById<FloatingActionButton>(R.id.main_floating_action_button).also { it ->
it.setOnClickListener {
fabClickCallback()
}
}
}

private fun fabClickCallback() {
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
(requireActivity() as MainActivity).navigateToPageNew()
}
}

}
@@ -0,0 +1,68 @@
package hidaka.kotlinstudy.todo.fragment

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.lifecycle.Lifecycle
import com.google.android.material.floatingactionbutton.FloatingActionButton
import hidaka.kotlinstudy.todo.R
import hidaka.kotlinstudy.todo.model.Page
import hidaka.kotlinstudy.todo.ui.PageDetailActivity
import hidaka.kotlinstudy.todo.ui_component.PagesRecyclerViewComponent
import java.text.DateFormat
import java.util.*

/**
* A simple [Fragment] subclass.
*/
class PageDetailFragment : Fragment() {

private lateinit var pageTitle: TextView
private lateinit var pageUpdatedAt: TextView
private lateinit var pageContent: TextView
private lateinit var floatingActionButton: FloatingActionButton

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_page_detail, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

val page: Page? =
arguments?.getParcelable(PagesRecyclerViewComponent.PUT_EXTRA_KEY_PAGE_DETAIL)

pageTitle = view.findViewById<TextView>(R.id.page_detail_title).also {
it.text = page?.title
}
pageUpdatedAt = view.findViewById<TextView>(R.id.page_detail_updated_at).also {
it.text = getString(
R.string.page_detail_activity_updated_at_label,
DateFormat.getDateInstance(DateFormat.LONG).format(page?.updatedAt ?: Date())
)
}
pageContent = view.findViewById<TextView>(R.id.page_detail_fragment_host).also {
it.text = page?.content
}
floatingActionButton =
view.findViewById<FloatingActionButton>(R.id.page_detail_floating_action_button).also {
it.setOnClickListener {
fabClickCallback()
}
}
}

private fun fabClickCallback() {
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
(requireActivity() as PageDetailActivity).navigateToPageEdit()
}
}

}
@@ -0,0 +1,24 @@
package hidaka.kotlinstudy.todo.fragment

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import hidaka.kotlinstudy.todo.R

/**
* A simple [Fragment] subclass.
*/
class PageEditFragment : Fragment() {

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_page_edit, container, false)
}


}
@@ -0,0 +1,23 @@
package hidaka.kotlinstudy.todo.fragment

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import hidaka.kotlinstudy.todo.R

/**
* A simple [Fragment] subclass.
*/
class PageNewFragment : Fragment() {

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_page_new, container, false)
}

}
46 changes: 15 additions & 31 deletions app/src/main/java/hidaka/kotlinstudy/todo/ui/PageDetailActivity.kt
Expand Up @@ -2,47 +2,31 @@ package hidaka.kotlinstudy.todo.ui

import android.content.Intent
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.floatingactionbutton.FloatingActionButton
import hidaka.kotlinstudy.todo.fragment.PageDetailFragment
import hidaka.kotlinstudy.todo.R
import hidaka.kotlinstudy.todo.R.string.page_detail_activity_updated_at_label
import hidaka.kotlinstudy.todo.model.Page
import hidaka.kotlinstudy.todo.ui_component.PagesRecyclerViewComponent
import java.text.DateFormat
import java.util.*

class PageDetailActivity : AppCompatActivity() {
private lateinit var pageTitle: TextView
private lateinit var pageUpdatedAt: TextView
private lateinit var pageContent: TextView
private lateinit var floatingActionButton: FloatingActionButton

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_page_detail)

val page: Page? =
intent.getParcelableExtra<Page?>(PagesRecyclerViewComponent.PUT_EXTRA_KEY_PAGE_DETAIL)
if (savedInstanceState == null) {
val fragment = PageDetailFragment()

pageTitle = findViewById<TextView>(R.id.page_detail_title).also {
it.text = page?.title
}
pageUpdatedAt = findViewById<TextView>(R.id.page_detail_updated_at).also {
it.text = getString(
page_detail_activity_updated_at_label,
DateFormat.getDateInstance(DateFormat.LONG).format(page?.updatedAt ?: Date())
)
}
pageContent = findViewById<TextView>(R.id.page_detail_content).also {
it.text = page?.content
// Intent extras and Fragment Args are both of type android.os.Bundle.
fragment.arguments = intent.extras

supportFragmentManager
.beginTransaction()
.add(R.id.page_detail_fragment_host, fragment)
.commit()
}
floatingActionButton =
findViewById<FloatingActionButton>(R.id.page_detail_floating_action_button).also {
it.setOnClickListener {
val intent = Intent(this, PageEditActivity::class.java)
startActivity(intent)
}
}
}

fun navigateToPageEdit() {
val intent = Intent(this, PageEditActivity::class.java)
startActivity(intent)
}
}
13 changes: 13 additions & 0 deletions app/src/main/java/hidaka/kotlinstudy/todo/ui/PageEditActivity.kt
Expand Up @@ -3,11 +3,24 @@ package hidaka.kotlinstudy.todo.ui
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import hidaka.kotlinstudy.todo.R
import hidaka.kotlinstudy.todo.fragment.PageEditFragment

class PageEditActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_page_edit)

if (savedInstanceState == null) {
val fragment = PageEditFragment()

// Intent extras and Fragment Args are both of type android.os.Bundle.
fragment.arguments = intent.extras

supportFragmentManager
.beginTransaction()
.add(R.id.page_edit_fragment_host, fragment)
.commit()
}
}
}
15 changes: 14 additions & 1 deletion app/src/main/java/hidaka/kotlinstudy/todo/ui/PageNewActivity.kt
@@ -1,13 +1,26 @@
package hidaka.kotlinstudy.todo.ui

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import hidaka.kotlinstudy.todo.R
import hidaka.kotlinstudy.todo.fragment.PageNewFragment

class PageNewActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_page_new)

if (savedInstanceState == null) {
val fragment = PageNewFragment()

// Intent extras and Fragment Args are both of type android.os.Bundle.
fragment.arguments = intent.extras

supportFragmentManager
.beginTransaction()
.add(R.id.page_new_fragment_host, fragment)
.commit()
}
}
}
27 changes: 4 additions & 23 deletions app/src/main/res/layout/activity_main.xml
@@ -1,23 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/main_floating_action_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:clickable="true"
android:focusable="true"
android:src="@drawable/ic_add_black_24dp" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_fragment_host"
android:layout_height="match_parent"
android:layout_width="match_parent" />

0 comments on commit 6e0c07f

Please sign in to comment.