Привет У меня есть условие, когда я должен добавить другой viewType с текстом
show more
или loading...
в нижней части окна рециркуляции
Я успешно добавил представление нижнего колонтитула с помощью show more, а также добавил прослушиватель в это представление элемента нижнего колонтитула для загрузки дополнительных данных, здесь все работает нормально. Так как у меня есть родительский макет обновления свайпов для просмотра повторных загрузок, я показываю включение процесса swiperefresh при загрузке и отключение процесса swiperefresh при завершении загрузки. Теперь мне нужно, чтобы каждый раз, когда я нажимал на тип представления show more
, который является нижним колонтитулом, присоединенным к представлению рециркулятора, я хочу, чтобы текст был изменен с loading...
, а когда загрузка будет завершена, текст должен быть изменен на show more
еще раз.
Вот мой класс адаптера
class MyTransactionAdapter(private val context: Context?,
private val transactionList: List<TransactionHistoryResponse>,
private val transactionListener: MyTransactionListener) : Filterable,
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var viewTypeList: Int = 0
private var viewTypeFooter: Int = 1
private var transactionListFiltered = transactionList
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == viewTypeList) {
val view: View = LayoutInflater.from(context).inflate(R.layout.row_my_transaction, parent, false)
ListViewHolder(view)
} else {
val view: View = LayoutInflater.from(context).inflate(R.layout.row_footer_so_more, parent, false)
FooterViewHolder(view)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val myTransaction = transactionListFiltered[position]
if (holder is ListViewHolder) {
holder.bind(myTransaction, transactionListener)
}
}
override fun getItemCount(): Int {
return transactionListFiltered.size
}
override fun getItemViewType(position: Int): Int {
return if (position == transactionList.lastIndex) {
viewTypeFooter
} else {
viewTypeList
}
}
inner class FooterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
init {
itemView.apply {
btnShowMore.setOnClickListener {
transactionListener.onLoadMoreClicked()
}
}
}
fun enableShowMore(enable: Boolean) {
if(enable){
itemView.btnShowMore.text = "show more"
}else{
itemView.btnShowMore.text = "loading..."
}
}
}
inner class ListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private lateinit var mTransactionStatus: TransactionStatus
fun bind(myTransaction: TransactionHistoryResponse, transactionListener: MyTransactionListener){
//logic to populate data on views
}
}
}
А вот функция фрагмента, где я выполняю загрузку
This function is being called for fetching data from remote
private fun getTransactionHistory() {
swipeContainer.enableDisableSwipeRefresh(true)
enableShowMore(false)
//logic to load web data and hide show swiperefresh
//when load is success call this function enableShowMore(true)
//when load is failed call this function enableShowMore(false)
}
@Synchronized
private fun enableShowMore(enable: Boolean) {
val viewHolder = recyclerView.findViewHolderForAdapterPosition(transactionList.size)
if (viewHolder is MyTransactionAdapter.FooterViewHolder) {
viewHolder.enableShowMore(enable)
}
}
// это реализованный метод при нажатии на нижний колонтитул
переопределить веселье onLoadMoreClicked () {
fetchTransactionListFromServer ()
}
Есть ли что-то, что мне нужно сделать с этим подходом, потому что пользователи могут нажимать несколько раз в нижнем колонтитуле, не позволяя приложению загружать удаленные данные.
Надеюсь, вы поняли ситуацию, если не дайте мне знать. Заранее спасибо
Вот скриншот, чего я добился