Skip to content

Commit 4d03c2f

Browse files
committed
article detail fragment
1 parent f33e962 commit 4d03c2f

File tree

8 files changed

+75
-3
lines changed

8 files changed

+75
-3
lines changed

app/src/main/java/com/sijanneupane/mvvmnews/models/Article.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.sijanneupane.mvvmnews.models
22

33
import androidx.room.Entity
44
import androidx.room.PrimaryKey
5+
import java.io.Serializable
56

67
/*
78
To save the article to database we need to annotate the class with entity
@@ -23,4 +24,5 @@ data class Article(
2324
val title: String,
2425
val url: String,
2526
val urlToImage: String
26-
)
27+
) : Serializable
28+
//serializing to send whole class with bundle

app/src/main/java/com/sijanneupane/mvvmnews/ui/fragments/ArticleFragment.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,30 @@ package com.sijanneupane.mvvmnews.ui.fragments
22

33
import android.os.Bundle
44
import android.view.View
5+
import android.webkit.WebViewClient
56
import androidx.fragment.app.Fragment
7+
import androidx.navigation.fragment.navArgs
68
import com.sijanneupane.mvvmnews.R
79
import com.sijanneupane.mvvmnews.ui.MainActivity
810
import com.sijanneupane.mvvmnews.ui.NewsViewModel
11+
import kotlinx.android.synthetic.main.fragment_article.*
912

1013
class ArticleFragment : Fragment(R.layout.fragment_article){
1114
lateinit var viewModel: NewsViewModel
15+
//get articles as global element
16+
val args: ArticleFragmentArgs by navArgs() //ArticleFragmentArgs is generated by navigation component when we add the args
1217

1318
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1419
super.onViewCreated(view, savedInstanceState)
1520
viewModel= (activity as MainActivity).viewModel
1621

22+
//get the current article that was passed as arguments to this fragment
23+
val article = args.article
24+
webView.apply {
25+
webViewClient= WebViewClient()
26+
loadUrl(article.url)
27+
}
28+
29+
1730
}
1831
}

app/src/main/java/com/sijanneupane/mvvmnews/ui/fragments/BreakingNewsFragment.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.widget.LinearLayout
77
import androidx.fragment.app.Fragment
88
import androidx.lifecycle.Observer
99
import androidx.lifecycle.viewModelScope
10+
import androidx.navigation.fragment.findNavController
1011
import androidx.recyclerview.widget.LinearLayoutManager
1112
import com.sijanneupane.mvvmnews.R
1213
import com.sijanneupane.mvvmnews.adapters.NewsAdapter
@@ -30,6 +31,17 @@ class BreakingNewsFragment : Fragment(R.layout.fragment_breaking_news) {
3031

3132
setupRecyclerView()
3233

34+
newsAdapter.setOnItemClickListener {
35+
val bundle= Bundle().apply{
36+
//adding serializable article object class to the bundle
37+
putSerializable("article", it)
38+
}
39+
findNavController().navigate(
40+
R.id.action_breakingNewsFragment_to_articleFragment,
41+
bundle
42+
)
43+
}
44+
3345
//subscribe to live data
3446
viewModel.breakingNews.observe(viewLifecycleOwner, Observer { response->
3547
when(response){

app/src/main/java/com/sijanneupane/mvvmnews/ui/fragments/SavedNewsFragment.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,47 @@ package com.sijanneupane.mvvmnews.ui.fragments
33
import android.os.Bundle
44
import android.view.View
55
import androidx.fragment.app.Fragment
6+
import androidx.navigation.fragment.findNavController
7+
import androidx.recyclerview.widget.LinearLayoutManager
68
import com.sijanneupane.mvvmnews.R
9+
import com.sijanneupane.mvvmnews.adapters.NewsAdapter
710
import com.sijanneupane.mvvmnews.ui.MainActivity
811
import com.sijanneupane.mvvmnews.ui.NewsViewModel
12+
import kotlinx.android.synthetic.main.fragment_saved_news.*
13+
import kotlinx.android.synthetic.main.fragment_search_news.*
914

1015
class SavedNewsFragment : Fragment(R.layout.fragment_saved_news) {
1116

1217
lateinit var viewModel: NewsViewModel
18+
lateinit var newsAdapter: NewsAdapter
1319

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

1723
//set viewModels to fragment activity
1824
//and we cast that as MainActivity so that we can have access to the view model created at MainActivity
1925
viewModel= (activity as MainActivity).viewModel
26+
27+
setupRecyclerView()
28+
29+
30+
newsAdapter.setOnItemClickListener {
31+
val bundle= Bundle().apply{
32+
//adding serializable article object class to the bundle
33+
putSerializable("article", it)
34+
}
35+
findNavController().navigate(
36+
R.id.action_savedNewsFragment_to_articleFragment,
37+
bundle
38+
)
39+
}
40+
}
41+
42+
private fun setupRecyclerView(){
43+
newsAdapter= NewsAdapter()
44+
rvSavedNews.apply {
45+
adapter = newsAdapter
46+
layoutManager = LinearLayoutManager(activity)
47+
}
2048
}
2149
}

app/src/main/java/com/sijanneupane/mvvmnews/ui/fragments/SearchNewsFragment.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.view.View
66
import androidx.core.widget.addTextChangedListener
77
import androidx.fragment.app.Fragment
88
import androidx.lifecycle.Observer
9+
import androidx.navigation.fragment.findNavController
910
import androidx.recyclerview.widget.LinearLayoutManager
1011
import com.sijanneupane.mvvmnews.R
1112
import com.sijanneupane.mvvmnews.adapters.NewsAdapter
@@ -33,6 +34,16 @@ class SearchNewsFragment : Fragment (R.layout.fragment_search_news) {
3334
viewModel= (activity as MainActivity).viewModel
3435
setupRecyclerView()
3536

37+
newsAdapter.setOnItemClickListener {
38+
val bundle= Bundle().apply{
39+
putSerializable("article", it)
40+
}
41+
findNavController().navigate(
42+
R.id.action_searchNewsFragment_to_articleFragment,
43+
bundle
44+
)
45+
}
46+
3647
//implementing search delay
3748
var job: Job? = null
3849
etSearch.addTextChangedListener {editable->

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
android:layout_marginBottom="32dp"
2020
android:layout_marginEnd="32dp"
2121
app:layout_constraintBottom_toBottomOf="parent"
22-
app:layout_constraintEnd_toEndOf="parent" />
22+
app:layout_constraintEnd_toEndOf="parent"
23+
android:contentDescription="@string/save" />
2324

2425
</androidx.constraintlayout.widget.ConstraintLayout>
2526

app/src/main/res/navigation/news_nav_graph.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,9 @@
4343
<fragment
4444
android:id="@+id/articleFragment"
4545
android:name="com.sijanneupane.mvvmnews.ui.fragments.ArticleFragment"
46-
android:label="ArticleFragment" />
46+
android:label="ArticleFragment" >
47+
<argument
48+
android:name="article"
49+
app:argType="com.sijanneupane.mvvmnews.models.Article" />
50+
</fragment>
4751
</navigation>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
<resources>
22
<string name="app_name">MVVM News</string>
3+
<string name="save">Save</string>
34
</resources>

0 commit comments

Comments
 (0)