From 1e4f89d507706b14fb3c621232237a0f0be51fce Mon Sep 17 00:00:00 2001 From: Jelena Petrovic Date: Mon, 12 Dec 2022 01:59:26 +0100 Subject: Prepravljen adapter za gridview liste objava da radi sa stranicenjem #83 --- .../Adapters/ShowPostsGridViewAdapter.kt | 30 +++++++++++++------- .../brzodolokacije/Fragments/FragmentShowPosts.kt | 33 +++++++++++++++------- .../brzodolokacije/Services/RetrofitHelper.kt | 4 +-- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsGridViewAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsGridViewAdapter.kt index dbe9e7d..f837afd 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsGridViewAdapter.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsGridViewAdapter.kt @@ -3,12 +3,12 @@ package com.example.brzodolokacije.Adapters import android.app.Activity import android.content.Intent import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView -import android.widget.TextView +import androidx.paging.PagingDataAdapter +import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.example.brzodolokacije.Activities.ActivitySinglePost @@ -17,8 +17,21 @@ import com.example.brzodolokacije.Models.PostPreview import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.RetrofitHelper -class ShowPostsGridViewAdapter(var postPreview:MutableList, val activity: Activity): - RecyclerView.Adapter() { +class ShowPostsGridViewAdapter(val activity: Activity,var postPreview:MutableList?=null): + PagingDataAdapter(REPO_COMPARATOR) { + + companion object{ + private val REPO_COMPARATOR=object: DiffUtil.ItemCallback(){ + override fun areContentsTheSame(oldItem: PostPreview, newItem: PostPreview): Boolean { + return oldItem._id==newItem._id + } + + override fun areItemsTheSame(oldItem: PostPreview, newItem: PostPreview): Boolean { + return oldItem._id==newItem._id + } + } + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PostViewHolder1 { val view= LayoutInflater.from(parent.context).inflate(R.layout.post_item_grid_view,parent,false) @@ -28,15 +41,12 @@ class ShowPostsGridViewAdapter(var postPreview:MutableList, val act holder.itemView.setOnClickListener { val intent: Intent = Intent(activity, ActivitySinglePost::class.java) var b= Bundle() - postPreview[position].location.type= LocationType.ADA - b.putParcelable("selectedPost", postPreview[position]) + getItem(position)!!.location.type= LocationType.ADA + b.putParcelable("selectedPost", getItem(position)!!) intent.putExtras(b) activity.startActivity(intent) } - return holder.bindView(postPreview[position] ) - } - override fun getItemCount(): Int { - return postPreview.size + return holder.bindView(getItem(position)!! ) } inner class PostViewHolder1(view: View): RecyclerView.ViewHolder(view){ private val background:com.google.android.material.imageview.ShapeableImageView=view.findViewById( diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPosts.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPosts.kt index 042e596..8bcbd72 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPosts.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPosts.kt @@ -1,6 +1,5 @@ package com.example.brzodolokacije.Fragments -import android.content.Intent import android.os.Bundle import android.util.Log import android.view.KeyEvent @@ -8,21 +7,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.* -import androidx.core.content.ContextCompat import androidx.core.widget.addTextChangedListener import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope +import androidx.paging.PagingData import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.SwipeRefreshLayout -import com.example.brzodolokacije.Activities.ActivityAddPost -import com.example.brzodolokacije.Activities.ChatActivity import com.example.brzodolokacije.Activities.NavigationActivity import com.example.brzodolokacije.Adapters.ShowPostsAdapter import com.example.brzodolokacije.Adapters.ShowPostsGridViewAdapter import com.example.brzodolokacije.Models.Location +import com.example.brzodolokacije.Models.PostPreview import com.example.brzodolokacije.Models.SearchParams import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.RetrofitHelper @@ -32,22 +30,21 @@ import com.example.brzodolokacije.paging.SearchPostsViewModel import com.example.brzodolokacije.paging.SearchPostsViewModelFactory import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.button.MaterialButton -import kotlinx.android.synthetic.main.fragment_show_posts.* import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch -import org.osmdroid.util.GeoPoint -import org.osmdroid.views.overlay.ItemizedIconOverlay -import org.osmdroid.views.overlay.OverlayItem import retrofit2.Call import retrofit2.Response class FragmentShowPosts : Fragment(), SwipeRefreshLayout.OnRefreshListener { + private var dataChanged:Boolean=false + private var flowData: PagingData?=null private lateinit var binding: FragmentShowPostsBinding private var linearManagerVar: RecyclerView.LayoutManager? = null private var adapterVar: ShowPostsAdapter? = null + private var gridViewAdapter:ShowPostsGridViewAdapter?=null private var recyclerView: RecyclerView?=null // private var gridManagerVar: RecyclerView.LayoutManager?=null private var swipeRefreshLayout:SwipeRefreshLayout?=null @@ -143,7 +140,12 @@ class FragmentShowPosts : Fragment(), SwipeRefreshLayout.OnRefreshListener { recyclerView?.layoutManager=gridManagerVar*/ recyclerView?.apply { layoutManager= GridLayoutManager(activity,2) - //adapter= ShowPostsGridViewAdapter(posts,requireActivity()) + if(gridViewAdapter==null) + gridViewAdapter= ShowPostsGridViewAdapter(requireActivity()) + recyclerView?.adapter=gridViewAdapter + if(dataChanged) + gridViewAdapter?.submitData(lifecycle,flowData!!) + dataChanged=false } Log.d("main","klik") } @@ -152,6 +154,10 @@ class FragmentShowPosts : Fragment(), SwipeRefreshLayout.OnRefreshListener { if(recyclerView?.layoutManager!=linearManagerVar){ recyclerView?.layoutManager=linearManagerVar } + recyclerView?.adapter=adapterVar + if(dataChanged) + adapterVar?.submitData(lifecycle,flowData!!) + dataChanged=false Log.d("main","klik") } @@ -161,7 +167,14 @@ class FragmentShowPosts : Fragment(), SwipeRefreshLayout.OnRefreshListener { fun requestToBack(searchParams: SearchParams){ lifecycleScope.launch{ searchPostsViewModel.fetchPosts(searchParams).distinctUntilChanged().collectLatest { - adapterVar?.submitData(lifecycle,it) + if(recyclerView?.adapter == gridViewAdapter){ + gridViewAdapter?.submitData(lifecycle,it) + } + else{ + adapterVar?.submitData(lifecycle,it) + } + dataChanged=true + flowData=it swipeRefreshLayout?.isRefreshing=false } } diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt index 43c2109..88685e4 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt @@ -7,8 +7,8 @@ import retrofit2.converter.gson.GsonConverterFactory object RetrofitHelper { - val baseUrl="http://10.0.2.2:5279" - //val baseUrl="http://147.91.204.115:10082" + //val baseUrl="http://10.0.2.2:5279" + val baseUrl="http://147.91.204.115:10082" private var retrofit_noauth: IBackendApi? = null private var retrofit_auth: IBackendApi? = null -- cgit v1.2.3