mirror of
https://github.com/hmalik144/Farmr.git
synced 2026-01-31 02:41:49 +00:00
- empty list implemented for recycler view
This commit is contained in:
@@ -13,8 +13,8 @@ android {
|
|||||||
applicationId "com.appttude.h_mal.farmr"
|
applicationId "com.appttude.h_mal.farmr"
|
||||||
minSdkVersion MIN_SDK_VERSION
|
minSdkVersion MIN_SDK_VERSION
|
||||||
targetSdkVersion TARGET_SDK_VERSION
|
targetSdkVersion TARGET_SDK_VERSION
|
||||||
versionCode 2
|
versionCode 3
|
||||||
versionName "2.0"
|
versionName "2.1"
|
||||||
testInstrumentationRunner 'com.appttude.h_mal.farmr.application.TestRunner'
|
testInstrumentationRunner 'com.appttude.h_mal.farmr.application.TestRunner'
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.appttude.h_mal.farmr.ui.robots
|
package com.appttude.h_mal.farmr.ui.robots
|
||||||
|
|
||||||
import androidx.test.espresso.Espresso
|
|
||||||
import androidx.test.espresso.action.ViewActions.scrollTo
|
import androidx.test.espresso.action.ViewActions.scrollTo
|
||||||
import com.appttude.h_mal.farmr.R
|
import com.appttude.h_mal.farmr.R
|
||||||
import com.appttude.h_mal.farmr.model.ShiftType
|
import com.appttude.h_mal.farmr.model.ShiftType
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package com.appttude.h_mal.farmr.base
|
||||||
|
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.appttude.h_mal.farmr.utils.hide
|
||||||
|
import com.appttude.h_mal.farmr.utils.show
|
||||||
|
|
||||||
|
abstract class BaseListAdapter<T : Any>(
|
||||||
|
diff: DiffUtil.ItemCallback<T>,
|
||||||
|
private val layoutId: Int,
|
||||||
|
private val emptyView: View
|
||||||
|
) : ListAdapter<T, BaseListAdapter.CurrentViewHolder>(diff) {
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(
|
||||||
|
parent: ViewGroup,
|
||||||
|
viewType: Int
|
||||||
|
): CurrentViewHolder {
|
||||||
|
val currentViewHolder = LayoutInflater
|
||||||
|
.from(parent.context)
|
||||||
|
.inflate(layoutId, parent, false)
|
||||||
|
return CurrentViewHolder(currentViewHolder)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
|
||||||
|
super.onAttachedToRecyclerView(recyclerView)
|
||||||
|
registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
|
||||||
|
override fun onChanged() {
|
||||||
|
checkEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onItemRangeChanged(positionStart: Int, itemCount: Int) {
|
||||||
|
checkEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) {
|
||||||
|
checkEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) {
|
||||||
|
checkEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
|
||||||
|
checkEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun checkEmpty() {
|
||||||
|
if (itemCount == 0) emptyView.show()
|
||||||
|
else emptyView.hide()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
class CurrentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
|
||||||
|
}
|
||||||
@@ -7,10 +7,10 @@ import androidx.recyclerview.widget.RecyclerView
|
|||||||
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
||||||
import com.appttude.h_mal.farmr.utils.generateView
|
import com.appttude.h_mal.farmr.utils.generateView
|
||||||
|
|
||||||
open class BaseRecyclerAdapter<T: Any>(
|
open class BaseRecyclerAdapter<T : Any>(
|
||||||
@LayoutRes private val emptyViewId: Int,
|
@LayoutRes private val emptyViewId: Int,
|
||||||
@LayoutRes private val currentViewId: Int
|
@LayoutRes private val currentViewId: Int
|
||||||
): RecyclerView.Adapter<ViewHolder>() {
|
) : RecyclerView.Adapter<ViewHolder>() {
|
||||||
var list: List<T>? = null
|
var list: List<T>? = null
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||||
@@ -37,6 +37,6 @@ open class BaseRecyclerAdapter<T: Any>(
|
|||||||
open fun bindEmptyView(view: View) {}
|
open fun bindEmptyView(view: View) {}
|
||||||
open fun bindCurrentView(view: View, position: Int, data: T) {}
|
open fun bindCurrentView(view: View, position: Int, data: T) {}
|
||||||
|
|
||||||
class EmptyViewHolder(itemView: View): ViewHolder(itemView)
|
class EmptyViewHolder(itemView: View) : ViewHolder(itemView)
|
||||||
class CurrentViewHolder(itemView: View): ViewHolder(itemView)
|
class CurrentViewHolder(itemView: View) : ViewHolder(itemView)
|
||||||
}
|
}
|
||||||
@@ -41,20 +41,13 @@ class FragmentMain : BaseFragment<MainViewModel>(R.layout.fragment_main), BackPr
|
|||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
mAdapter = ShiftListAdapter(this) {
|
emptyView = view.findViewById(R.id.empty_view)
|
||||||
|
productListView = view.findViewById(R.id.list_item_view)
|
||||||
|
|
||||||
|
mAdapter = ShiftListAdapter(this, emptyView) {
|
||||||
viewModel.deleteShift(it)
|
viewModel.deleteShift(it)
|
||||||
}
|
}
|
||||||
productListView = view.findViewById(R.id.list_item_view)
|
|
||||||
productListView.adapter = mAdapter
|
productListView.adapter = mAdapter
|
||||||
emptyView = view.findViewById(R.id.empty_view)
|
|
||||||
|
|
||||||
mAdapter.registerAdapterDataObserver(object : AdapterDataObserver() {
|
|
||||||
override fun onChanged() {
|
|
||||||
super.onChanged()
|
|
||||||
if (mAdapter.itemCount == 0) emptyView.show()
|
|
||||||
else emptyView.hide()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
view.findViewById<FloatingActionButton>(R.id.fab1).setOnClickListener {
|
view.findViewById<FloatingActionButton>(R.id.fab1).setOnClickListener {
|
||||||
navigateToFragment(FragmentAddItem(), name = "additem")
|
navigateToFragment(FragmentAddItem(), name = "additem")
|
||||||
|
|||||||
@@ -3,34 +3,26 @@ package com.appttude.h_mal.farmr.ui
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.ViewGroup
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
|
||||||
import com.appttude.h_mal.farmr.R
|
import com.appttude.h_mal.farmr.R
|
||||||
import com.appttude.h_mal.farmr.base.BaseRecyclerAdapter
|
import com.appttude.h_mal.farmr.base.BaseListAdapter
|
||||||
import com.appttude.h_mal.farmr.data.legacydb.ShiftObject
|
import com.appttude.h_mal.farmr.data.legacydb.ShiftObject
|
||||||
import com.appttude.h_mal.farmr.model.ShiftType
|
import com.appttude.h_mal.farmr.model.ShiftType
|
||||||
import com.appttude.h_mal.farmr.utils.ID
|
import com.appttude.h_mal.farmr.utils.ID
|
||||||
import com.appttude.h_mal.farmr.utils.generateView
|
|
||||||
import com.appttude.h_mal.farmr.utils.navigateToFragment
|
import com.appttude.h_mal.farmr.utils.navigateToFragment
|
||||||
|
|
||||||
class ShiftListAdapter(
|
class ShiftListAdapter(
|
||||||
private val fragment: Fragment,
|
private val fragment: Fragment,
|
||||||
|
emptyView: View,
|
||||||
private val longPressCallback: (Long) -> Unit
|
private val longPressCallback: (Long) -> Unit
|
||||||
) : ListAdapter<ShiftObject, BaseRecyclerAdapter.CurrentViewHolder>(diffCallBack) {
|
) : BaseListAdapter<ShiftObject>(diffCallBack, R.layout.list_item_1, emptyView) {
|
||||||
override fun onCreateViewHolder(
|
|
||||||
parent: ViewGroup,
|
|
||||||
viewType: Int
|
|
||||||
): BaseRecyclerAdapter.CurrentViewHolder {
|
|
||||||
val currentViewHolder = parent.generateView(R.layout.list_item_1)
|
|
||||||
return BaseRecyclerAdapter.CurrentViewHolder(currentViewHolder)
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
override fun onBindViewHolder(holder: BaseRecyclerAdapter.CurrentViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: CurrentViewHolder, position: Int) {
|
||||||
val view = holder.itemView
|
val view = holder.itemView
|
||||||
val data = getItem(position)
|
val data = getItem(position)
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ class SplashScreen : Activity() {
|
|||||||
Handler(Looper.getMainLooper()).postDelayed({
|
Handler(Looper.getMainLooper()).postDelayed({
|
||||||
startActivity(i)
|
startActivity(i)
|
||||||
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
|
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
|
||||||
|
this.finish()
|
||||||
}, SPLASH_TIME_OUT)
|
}, SPLASH_TIME_OUT)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,8 @@ import java.util.Currency
|
|||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
fun String.formatToTwoDp(): Float {
|
fun String.formatToTwoDp(): String {
|
||||||
val formattedString = String.format("%.2f", this)
|
return String.format("%.2f", this)
|
||||||
return formattedString.toFloat()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Float.formatToTwoDp(): Float {
|
fun Float.formatToTwoDp(): Float {
|
||||||
|
|||||||
@@ -24,8 +24,11 @@
|
|||||||
app:backgroundTint="@color/colorPrimary" />
|
app:backgroundTint="@color/colorPrimary" />
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:visibility="gone"
|
android:layout_centerInParent="true"
|
||||||
|
android:visibility="visible"
|
||||||
layout="@layout/empty_list_view"
|
layout="@layout/empty_list_view"
|
||||||
android:id="@+id/empty_view"/>
|
android:id="@+id/empty_view"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|||||||
Reference in New Issue
Block a user