File tree Expand file tree Collapse file tree 9 files changed +123
-0
lines changed
app/src/main/java/com/sijanneupane/mvvmnews Expand file tree Collapse file tree 9 files changed +123
-0
lines changed Original file line number Diff line number Diff line change 1+ package com.sijanneupane.mvvmnews.repository
2+
3+ import com.sijanneupane.mvvmnews.db.ArticleDatabase
4+
5+ class NewsRepository (
6+ val db : ArticleDatabase // parameter
7+ ) {
8+ }
Original file line number Diff line number Diff line change @@ -2,17 +2,26 @@ package com.sijanneupane.mvvmnews.ui
22
33import androidx.appcompat.app.AppCompatActivity
44import android.os.Bundle
5+ import androidx.lifecycle.ViewModelProvider
56import androidx.navigation.fragment.findNavController
67import androidx.navigation.ui.setupWithNavController
78import com.sijanneupane.mvvmnews.R
9+ import com.sijanneupane.mvvmnews.db.ArticleDatabase
10+ import com.sijanneupane.mvvmnews.repository.NewsRepository
811import kotlinx.android.synthetic.main.activity_main.*
912
1013class MainActivity : AppCompatActivity () {
14+ lateinit var viewModel: NewsViewModel
1115
1216 override fun onCreate (savedInstanceState : Bundle ? ) {
1317 super .onCreate(savedInstanceState)
1418 setContentView(R .layout.activity_main)
1519
20+ // initializations and assign
21+ val repository= NewsRepository (ArticleDatabase (this ))
22+ val viewModelProviderFactory= NewsViewModelProviderFactory (repository)
23+ viewModel= ViewModelProvider (this , viewModelProviderFactory).get(NewsViewModel ::class .java)
24+
1625 bottomNavigationView.setupWithNavController(newsNavHostFrag.findNavController())
1726
1827
Original file line number Diff line number Diff line change 1+ package com.sijanneupane.mvvmnews.ui
2+
3+ import androidx.lifecycle.ViewModel
4+ import com.sijanneupane.mvvmnews.repository.NewsRepository
5+
6+ class NewsViewModel (
7+ val newsRepository : NewsRepository // parameter
8+ ) : ViewModel(){
9+ }
Original file line number Diff line number Diff line change 1+ package com.sijanneupane.mvvmnews.ui
2+
3+ import androidx.lifecycle.ViewModel
4+ import androidx.lifecycle.ViewModelProvider
5+ import com.sijanneupane.mvvmnews.repository.NewsRepository
6+ /*
7+ To define how our view model should be created
8+ */
9+ class NewsViewModelProviderFactory (
10+ val newsRepository : NewsRepository
11+ ) : ViewModelProvider.Factory{
12+
13+ override fun <T : ViewModel ?> create (modelClass : Class <T >): T {
14+ return NewsViewModel (newsRepository) as T
15+ }
16+ }
Original file line number Diff line number Diff line change 11package com.sijanneupane.mvvmnews.ui.fragments
22
3+ import android.os.Bundle
4+ import android.view.View
35import androidx.fragment.app.Fragment
46import com.sijanneupane.mvvmnews.R
7+ import com.sijanneupane.mvvmnews.ui.MainActivity
8+ import com.sijanneupane.mvvmnews.ui.NewsViewModel
59
610class ArticleFragment : Fragment (R .layout.fragment_article){
11+ lateinit var viewModel: NewsViewModel
12+
13+ override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
14+ super .onViewCreated(view, savedInstanceState)
15+ viewModel= (activity as MainActivity ).viewModel
16+
17+ }
718}
Original file line number Diff line number Diff line change 11package com.sijanneupane.mvvmnews.ui.fragments
22
3+ import android.os.Bundle
4+ import android.view.View
35import androidx.fragment.app.Fragment
6+ import androidx.lifecycle.viewModelScope
47import com.sijanneupane.mvvmnews.R
8+ import com.sijanneupane.mvvmnews.ui.MainActivity
9+ import com.sijanneupane.mvvmnews.ui.NewsViewModel
510
611class BreakingNewsFragment : Fragment (R .layout.fragment_breaking_news) {
12+ lateinit var viewModel: NewsViewModel
13+
14+ override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
15+ super .onViewCreated(view, savedInstanceState)
16+
17+ // set viewModels to fragment activity
18+ // and we cast that as MainActivity so that we can have access to the view model created at MainActivity
19+ viewModel= (activity as MainActivity ).viewModel
20+ }
721}
Original file line number Diff line number Diff line change 11package com.sijanneupane.mvvmnews.ui.fragments
22
3+ import android.os.Bundle
4+ import android.view.View
35import androidx.fragment.app.Fragment
46import com.sijanneupane.mvvmnews.R
7+ import com.sijanneupane.mvvmnews.ui.MainActivity
8+ import com.sijanneupane.mvvmnews.ui.NewsViewModel
59
610class SavedNewsFragment : Fragment (R .layout.fragment_saved_news) {
11+
12+ lateinit var viewModel: NewsViewModel
13+
14+ override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
15+ super .onViewCreated(view, savedInstanceState)
16+
17+ // set viewModels to fragment activity
18+ // and we cast that as MainActivity so that we can have access to the view model created at MainActivity
19+ viewModel= (activity as MainActivity ).viewModel
20+ }
721}
Original file line number Diff line number Diff line change 11package com.sijanneupane.mvvmnews.ui.fragments
22
3+ import android.os.Bundle
4+ import android.view.View
35import androidx.fragment.app.Fragment
46import com.sijanneupane.mvvmnews.R
7+ import com.sijanneupane.mvvmnews.ui.MainActivity
8+ import com.sijanneupane.mvvmnews.ui.NewsViewModel
59
610class SearchNewsFragment : Fragment (R .layout.fragment_search_news) {
11+
12+ lateinit var viewModel: NewsViewModel
13+
14+ override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
15+ super .onViewCreated(view, savedInstanceState)
16+
17+ // set viewModels to fragment activity
18+ // and we cast that as MainActivity so that we can have access to the view model created at MainActivity
19+ viewModel= (activity as MainActivity ).viewModel
20+ }
721}
Original file line number Diff line number Diff line change 1+ package com.sijanneupane.mvvmnews.utils
2+ /*
3+ RESOURCE:
4+ recommended by google
5+ to wrap around network responses
6+
7+ this will be an generic class
8+ very useful to differentiate between success and error responses
9+ and also helps in handling the loading state
10+ */
11+ /*
12+ SEALED CLASS:
13+ kind of an abstract class where we can define which class are allowed to inherit the from this Resource Class
14+ */
15+ sealed class Resource <T >(
16+ // parameters
17+ val data : T ? =null ,
18+ val message : String? = null ,
19+
20+ ){
21+
22+ // classes allowed to inherit
23+ class Success <T >(data : T ) : Resource<T>(data)
24+ class Error <T >(message : String , data : T ? = null ): Resource<T>(data, message)
25+ class Loading <T >: Resource <T >()
26+
27+
28+ }
You can’t perform that action at this time.
0 commit comments