Skip to content

Commit ceb5bb6

Browse files
committed
Add base fragment
1 parent 6335cd5 commit ceb5bb6

File tree

8 files changed

+50
-38
lines changed

8 files changed

+50
-38
lines changed

app/src/main/java/com/sample/android/tmdb/ui/base/BaseDetailFragment.kt

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,23 @@ import android.os.Bundle
44
import android.view.LayoutInflater
55
import android.view.View
66
import android.view.ViewGroup
7-
import androidx.annotation.LayoutRes
8-
import androidx.databinding.DataBindingUtil
97
import androidx.databinding.ViewDataBinding
108
import androidx.databinding.library.baseAdapters.BR
119
import androidx.lifecycle.ViewModel
12-
import dagger.android.support.DaggerFragment
1310

14-
abstract class BaseDetailFragment<VM: ViewModel, VB: ViewDataBinding>(
15-
@LayoutRes private val layoutId: Int
16-
): DaggerFragment() {
11+
abstract class BaseDetailFragment<VM: ViewModel, VB: ViewDataBinding>: BaseFragment<VB>() {
1712

1813
protected abstract val viewModel: VM
1914

20-
private var _binding: VB? = null
21-
22-
protected val binding get() = _binding!!
23-
2415
override fun onCreateView(
2516
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
26-
): View? {
27-
_binding = DataBindingUtil.inflate(inflater, layoutId, container, false)
17+
): View {
18+
super.onCreateView(inflater, container, savedInstanceState)
2819
binding.apply {
2920
setVariable(BR.vm, viewModel)
3021
// Set the lifecycleOwner so DataBinding can observe LiveData
3122
lifecycleOwner = viewLifecycleOwner
3223
}
33-
return super.onCreateView(inflater, container, savedInstanceState)
34-
}
35-
36-
override fun onDestroyView() {
37-
super.onDestroyView()
38-
_binding = null
24+
return binding.root
3925
}
4026
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.sample.android.tmdb.ui.base
2+
3+
import android.os.Bundle
4+
import android.view.LayoutInflater
5+
import android.view.View
6+
import android.view.ViewGroup
7+
import androidx.databinding.ViewDataBinding
8+
import dagger.android.support.DaggerFragment
9+
10+
open class BaseFragment<VB: ViewDataBinding>: DaggerFragment() {
11+
12+
private var _binding: VB? = null
13+
14+
protected val binding get() = _binding!!
15+
16+
protected open fun setBinding(): VB? = null
17+
18+
override fun onCreateView(
19+
inflater: LayoutInflater,
20+
container: ViewGroup?,
21+
savedInstanceState: Bundle?
22+
): View? {
23+
_binding = this.setBinding()
24+
return binding.root
25+
}
26+
27+
override fun onDestroyView() {
28+
super.onDestroyView()
29+
_binding = null
30+
}
31+
}

app/src/main/java/com/sample/android/tmdb/ui/base/BaseNavigationFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package com.sample.android.tmdb.ui.base
22

33
import android.content.Intent
44
import android.os.Bundle
5+
import androidx.databinding.ViewDataBinding
56
import com.sample.android.tmdb.domain.model.TmdbItem
67
import com.sample.android.tmdb.ui.detail.movie.DetailMovieActivity
78
import com.sample.android.tmdb.ui.detail.tvshow.DetailTVShowActivity
89
import com.sample.android.tmdb.ui.feed.NavType
910
import com.sample.android.tmdb.util.Constants
10-
import dagger.android.support.DaggerFragment
1111

12-
abstract class BaseNavigationFragment : DaggerFragment() {
12+
abstract class BaseNavigationFragment<VB: ViewDataBinding> : BaseFragment<VB>() {
1313

1414
protected abstract val navType: NavType
1515

app/src/main/java/com/sample/android/tmdb/ui/detail/DetailFragment.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,16 @@ import com.sample.android.tmdb.util.setupActionBar
2020
import com.sample.android.tmdb.util.toVisibility
2121
import javax.inject.Inject
2222

23-
abstract class DetailFragment : BaseDetailFragment<DetailViewModel, FragmentDetailBinding>
24-
(R.layout.fragment_detail) {
23+
abstract class DetailFragment : BaseDetailFragment<DetailViewModel, FragmentDetailBinding>() {
2524

2625
@Inject
2726
lateinit var tmdbItem: TmdbItem
2827

28+
override fun setBinding() = FragmentDetailBinding.inflate(layoutInflater)
29+
2930
override fun onCreateView(
3031
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
31-
): View? {
32+
): View {
3233
super.onCreateView(inflater, container, savedInstanceState)
3334
with(binding) {
3435
tmdbItem = this@DetailFragment.tmdbItem

app/src/main/java/com/sample/android/tmdb/ui/feed/FeedFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import com.sample.android.tmdb.ui.common.Content
1010
import com.sample.android.tmdb.ui.common.TmdbTheme
1111
import com.sample.android.tmdb.ui.common.composeView
1212

13-
abstract class FeedFragment<T : TmdbItem> : BaseNavigationFragment() {
13+
abstract class FeedFragment<T : TmdbItem> : BaseNavigationFragment<Nothing>() {
1414

1515
protected abstract val viewModel: FeedViewModel<T>
1616

app/src/main/java/com/sample/android/tmdb/ui/paging/BasePagingFragment.kt

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,23 @@ import com.sample.android.tmdb.data.paging.Status.RUNNING
1313
import com.sample.android.tmdb.ui.base.BaseNavigationFragment
1414
import com.sample.android.tmdb.widget.MarginDecoration
1515

16-
abstract class BasePagingFragment<T : TmdbItem> : BaseNavigationFragment() {
16+
abstract class BasePagingFragment<T : TmdbItem> : BaseNavigationFragment<FragmentMainBinding>() {
1717

1818
protected abstract val viewModel: BasePagingViewModel<T>
1919

20-
private var _binding: FragmentMainBinding? = null
21-
22-
protected val binding get() = _binding!!
23-
2420
protected lateinit var tmdbAdapter: TmdbAdapter<T>
2521

2622
protected open fun refresh() {
2723
viewModel.refresh()
2824
}
2925

26+
override fun setBinding() = FragmentMainBinding.inflate(layoutInflater)
27+
3028
override fun onCreateView(
3129
inflater: LayoutInflater, container: ViewGroup?,
3230
savedInstanceState: Bundle?
3331
): View? {
34-
35-
_binding = FragmentMainBinding.inflate(inflater)
36-
32+
super.onCreateView(inflater, container, savedInstanceState)
3733
tmdbAdapter = TmdbAdapter(viewModel::retry, object : TmdbClickCallback<T> {
3834
override fun onClick(t: T) {
3935
startDetailActivity(t)
@@ -79,9 +75,4 @@ abstract class BasePagingFragment<T : TmdbItem> : BaseNavigationFragment() {
7975

8076
return binding.root
8177
}
82-
83-
override fun onDestroyView() {
84-
super.onDestroyView()
85-
_binding = null
86-
}
8778
}

app/src/main/java/com/sample/android/tmdb/ui/person/PersonFragment.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import javax.inject.Inject
1414

1515
class PersonFragment @Inject
1616
constructor() // Required empty public constructor
17-
: BaseDetailFragment<PersonViewModel, FragmentPersonBinding>(R.layout.fragment_person) {
17+
: BaseDetailFragment<PersonViewModel, FragmentPersonBinding>() {
1818

1919
@Inject
2020
lateinit var factory: PersonViewModel.Factory
@@ -26,6 +26,8 @@ constructor() // Required empty public constructor
2626
ViewModelProvider(this, factory)[PersonViewModel::class.java]
2727
}
2828

29+
override fun setBinding() = FragmentPersonBinding.inflate(layoutInflater)
30+
2931
override fun onCreateView(
3032
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
3133
): View {

app/src/main/res/layout/tmdb_item.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
android:onClick="@{() -> callback.onClick(tmdbItem)}"
2424
app:cardElevation="@dimen/z_app_bar"
2525
app:ImageUrl="@{tmdbItem.posterUrl}"
26+
app:cardCornerRadius="10dp"
2627
tools:ignore="KeyboardInaccessibleWidget">
2728

2829
<ImageView

0 commit comments

Comments
 (0)