From b18006ce391d024dd740d763b3c4765313271998 Mon Sep 17 00:00:00 2001 From: Dat Nguyen Date: Thu, 16 Mar 2023 12:10:39 -0400 Subject: [PATCH 1/2] Add fragment instance --- .../java/edu/temple/inclassactivity/MainActivity.kt | 5 ++++- app/src/main/res/layout/activity_main.xml | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/edu/temple/inclassactivity/MainActivity.kt b/app/src/main/java/edu/temple/inclassactivity/MainActivity.kt index 85bef74..f0dc34d 100644 --- a/app/src/main/java/edu/temple/inclassactivity/MainActivity.kt +++ b/app/src/main/java/edu/temple/inclassactivity/MainActivity.kt @@ -14,6 +14,9 @@ class MainActivity : AppCompatActivity() { typedArray.recycle() // Attach an instance of ImageDisplayFragment using factory method - + val fragment = ImageDisplayFragment.newInstance(imageArray) + val fragmentT = supportFragmentManager.beginTransaction() + fragmentT.add(R.id.fragmentContainerView, fragment) + fragmentT.commit() } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d548e41..592bc13 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,4 +5,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> + + \ No newline at end of file From c4f6098127651f5739cb9a2ecce0a08fc087b8ed Mon Sep 17 00:00:00 2001 From: Dat Nguyen Date: Thu, 23 Mar 2023 12:17:02 -0400 Subject: [PATCH 2/2] Add mainViewModel and use lazy on ImageDisplayFragment.kt --- .idea/vcs.xml | 6 ++++++ .../inclassactivity/ImageDisplayFragment.kt | 10 +++++++++- .../temple/inclassactivity/MainActivity.kt | 9 +++++++-- .../temple/inclassactivity/MainViewModel.kt | 20 +++++++++++++++++++ 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 .idea/vcs.xml create mode 100644 app/src/main/java/edu/temple/inclassactivity/MainViewModel.kt diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/java/edu/temple/inclassactivity/ImageDisplayFragment.kt b/app/src/main/java/edu/temple/inclassactivity/ImageDisplayFragment.kt index 4d09c5b..e0bdb25 100644 --- a/app/src/main/java/edu/temple/inclassactivity/ImageDisplayFragment.kt +++ b/app/src/main/java/edu/temple/inclassactivity/ImageDisplayFragment.kt @@ -9,6 +9,7 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -18,6 +19,10 @@ class ImageDisplayFragment : Fragment() { private lateinit var images: IntArray + private val mainViewModel : MainViewModel by lazy{ + ViewModelProvider(requireActivity())[MainViewModel::class.java] + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // If we have arguments @@ -40,7 +45,10 @@ class ImageDisplayFragment : Fragment() { // The recycler view is the root element of the Fragment's layout // as such the view argument passed to onViewCreated() is the RecyclerView with (view as RecyclerView) { - adapter = CustomRecyclerAdapter(images) + mainViewModel.getImageIds().observe(requireActivity()){ + adapter = CustomRecyclerAdapter(it) + } + layoutManager = GridLayoutManager(requireContext(), 2) } } diff --git a/app/src/main/java/edu/temple/inclassactivity/MainActivity.kt b/app/src/main/java/edu/temple/inclassactivity/MainActivity.kt index f0dc34d..7bf7632 100644 --- a/app/src/main/java/edu/temple/inclassactivity/MainActivity.kt +++ b/app/src/main/java/edu/temple/inclassactivity/MainActivity.kt @@ -2,21 +2,26 @@ package edu.temple.inclassactivity import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import androidx.lifecycle.ViewModelProvider class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + val mainViewModel = ViewModelProvider(this)[MainViewModel::class.java] + // Fetch images into IntArray called imageArray val typedArray = resources.obtainTypedArray(R.array.image_ids) val imageArray = IntArray(typedArray.length()) {typedArray.getResourceId(it, 0)} typedArray.recycle() + mainViewModel.setImageIds(imageArray) + // Attach an instance of ImageDisplayFragment using factory method - val fragment = ImageDisplayFragment.newInstance(imageArray) + //val fragment = ImageDisplayFragment.newInstance(imageArray) val fragmentT = supportFragmentManager.beginTransaction() - fragmentT.add(R.id.fragmentContainerView, fragment) + fragmentT.add(R.id.fragmentContainerView, ImageDisplayFragment()) fragmentT.commit() } } \ No newline at end of file diff --git a/app/src/main/java/edu/temple/inclassactivity/MainViewModel.kt b/app/src/main/java/edu/temple/inclassactivity/MainViewModel.kt new file mode 100644 index 0000000..6d19915 --- /dev/null +++ b/app/src/main/java/edu/temple/inclassactivity/MainViewModel.kt @@ -0,0 +1,20 @@ +package edu.temple.inclassactivity + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel + +class MainViewModel: ViewModel() { + private val imageIds = MutableLiveData() + + + fun setImageIds(imageIds: IntArray){ + this.imageIds.value = imageIds + } + + fun getImageIds(): LiveData{ + return imageIds + } + + +} \ No newline at end of file