diff --git a/app/src/main/java/com/github/apognu/otter/adapters/AlbumsAdapter.kt b/app/src/main/java/com/github/apognu/otter/adapters/AlbumsAdapter.kt index 09f6e27..c7049af 100644 --- a/app/src/main/java/com/github/apognu/otter/adapters/AlbumsAdapter.kt +++ b/app/src/main/java/com/github/apognu/otter/adapters/AlbumsAdapter.kt @@ -20,6 +20,8 @@ class AlbumsAdapter(val context: Context?, private val listener: OnAlbumClickLis fun onClick(view: View?, album: Album) } + override fun getItemId(position: Int): Long = data[position].id.toLong() + override fun getItemCount() = data.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { diff --git a/app/src/main/java/com/github/apognu/otter/adapters/AlbumsGridAdapter.kt b/app/src/main/java/com/github/apognu/otter/adapters/AlbumsGridAdapter.kt index d38c0db..02904fd 100644 --- a/app/src/main/java/com/github/apognu/otter/adapters/AlbumsGridAdapter.kt +++ b/app/src/main/java/com/github/apognu/otter/adapters/AlbumsGridAdapter.kt @@ -19,6 +19,8 @@ class AlbumsGridAdapter(val context: Context?, private val listener: OnAlbumClic fun onClick(view: View?, album: Album) } + override fun getItemId(position: Int): Long = data[position].id.toLong() + override fun getItemCount() = data.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { diff --git a/app/src/main/java/com/github/apognu/otter/adapters/RadiosAdapter.kt b/app/src/main/java/com/github/apognu/otter/adapters/RadiosAdapter.kt index 5e771ae..607c83d 100644 --- a/app/src/main/java/com/github/apognu/otter/adapters/RadiosAdapter.kt +++ b/app/src/main/java/com/github/apognu/otter/adapters/RadiosAdapter.kt @@ -57,9 +57,13 @@ class RadiosAdapter(val context: Context?, val scope: CoroutineScope, private va } } - override fun getItemCount() = instanceRadios.size + data.size + 2 + override fun getItemId(position: Int) = when (getItemViewType(position)) { + RowType.InstanceRadio.ordinal -> (-position - 1).toLong() + RowType.Header.ordinal -> Long.MIN_VALUE + else -> getRadioAt(position).id.toLong() + } - override fun getItemId(position: Int) = data[position].id.toLong() + override fun getItemCount() = instanceRadios.size + data.size + 2 override fun getItemViewType(position: Int): Int { return when { diff --git a/app/src/main/java/com/github/apognu/otter/adapters/TracksAdapter.kt b/app/src/main/java/com/github/apognu/otter/adapters/TracksAdapter.kt index fd9854a..f1402c4 100644 --- a/app/src/main/java/com/github/apognu/otter/adapters/TracksAdapter.kt +++ b/app/src/main/java/com/github/apognu/otter/adapters/TracksAdapter.kt @@ -25,11 +25,9 @@ class TracksAdapter(private val context: Context?, private val favoriteListener: var currentTrack: Track? = null - override fun getItemCount() = data.size + override fun getItemId(position: Int): Long = data[position].id.toLong() - override fun getItemId(position: Int): Long { - return data[position].id.toLong() - } + override fun getItemCount() = data.size override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { super.onAttachedToRecyclerView(recyclerView) diff --git a/app/src/main/java/com/github/apognu/otter/fragments/OtterFragment.kt b/app/src/main/java/com/github/apognu/otter/fragments/OtterFragment.kt index 4a92218..a5e3e1a 100644 --- a/app/src/main/java/com/github/apognu/otter/fragments/OtterFragment.kt +++ b/app/src/main/java/com/github/apognu/otter/fragments/OtterFragment.kt @@ -8,6 +8,7 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.SimpleItemAnimator import com.github.apognu.otter.repositories.HttpUpstream import com.github.apognu.otter.repositories.Repository import com.github.apognu.otter.utils.* @@ -22,6 +23,12 @@ import kotlinx.coroutines.withContext abstract class OtterAdapter : RecyclerView.Adapter() { var data: MutableList = mutableListOf() + + init { + super.setHasStableIds(true) + } + + abstract override fun getItemId(position: Int): Long } abstract class OtterFragment> : Fragment() { @@ -46,6 +53,7 @@ abstract class OtterFragment> : Fragment() { super.onViewCreated(view, savedInstanceState) recycler.layoutManager = layoutManager + (recycler.itemAnimator as? SimpleItemAnimator)?.supportsChangeAnimations = false recycler.adapter = adapter (repository.upstream as? HttpUpstream<*, *>)?.let { upstream ->