Skip to content

Commit

Permalink
getUriPositionForAdapterPosition
Browse files Browse the repository at this point in the history
  • Loading branch information
GuhDoy committed Jul 2, 2023
1 parent 069268d commit eebb940
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public Long getKey(int position) {
public int getPosition(@NonNull Long key) {
var holder = mRecyclerView.findViewHolderForItemId(key);
if (holder != null) {
return holder.getLayoutPosition();
return holder.getBindingAdapterPosition();
} else {
for (int i = 0, itemCount = mAdapter.getItemCount(); i < itemCount; i++) {
if (key == mAdapter.getItemId(i)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ class ImagesAdapter(private val fragment: ImagesFragment) : MediaStoreAdapter(fr

fun getHolderPositionForUriPosition(position: Int): Int = uriPositionMap[position]

private fun getUriPositionForAdapterPosition(position: Int) =
uriPositionMap.binarySearch(position)

override fun getItemViewType(position: Int): Int = when (getItem(position)) {
is MediaStoreImage -> R.layout.images_item
else -> super.getItemViewType(position)
Expand All @@ -51,7 +54,7 @@ class ImagesAdapter(private val fragment: ImagesFragment) : MediaStoreAdapter(fr
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
when (viewType) {
R.layout.images_item -> ItemViewHolder(
ImagesItemBinding.inflate(LayoutInflater.from(parent.context)), 0
ImagesItemBinding.inflate(LayoutInflater.from(parent.context))
)

else -> super.onCreateViewHolder(parent, viewType)
Expand All @@ -61,7 +64,6 @@ class ImagesAdapter(private val fragment: ImagesFragment) : MediaStoreAdapter(fr
when (holder) {
is ItemViewHolder -> {
val binding = holder.binding
holder.uriPosition = uriPositionMap.binarySearch(position)
val item = getItem(position)
// Load the image with Glide to prevent OOM error when the image drawables are very large.
Glide.with(fragment)
Expand All @@ -71,7 +73,7 @@ class ImagesAdapter(private val fragment: ImagesFragment) : MediaStoreAdapter(fr
e: GlideException?, model: Any?, target: Target<Drawable?>?,
isFirstResource: Boolean
): Boolean {
if (fragment.lastPosition == holder.uriPosition) {
if (fragment.lastPosition == getUriPositionForAdapterPosition(holder.bindingAdapterPosition)) {
fragment.startPostponedEnterTransition()
}
return false
Expand All @@ -81,7 +83,7 @@ class ImagesAdapter(private val fragment: ImagesFragment) : MediaStoreAdapter(fr
resource: Drawable?, model: Any?, target: Target<Drawable?>?,
dataSource: DataSource?, isFirstResource: Boolean
): Boolean {
if (fragment.lastPosition == holder.uriPosition) {
if (fragment.lastPosition == getUriPositionForAdapterPosition(holder.bindingAdapterPosition)) {
fragment.startPostponedEnterTransition()
}
return false
Expand All @@ -97,15 +99,18 @@ class ImagesAdapter(private val fragment: ImagesFragment) : MediaStoreAdapter(fr
) {
return@setOnClickListener
}
fragment.lastPosition = holder.uriPosition
val uriPosition = getUriPositionForAdapterPosition(
holder.bindingAdapterPosition
)
fragment.lastPosition = uriPosition

// Exclude the clicked card from the exit transition (e.g. the card will disappear immediately
// instead of fading out with the rest to prevent an overlapping animation of fade and move).
(fragment.exitTransition as TransitionSet).excludeTarget(binding.card, true)

val images = viewModel.medias
val direction = ImagesFragmentDirections.actionImagesToImagePager(
initialPosition = holder.uriPosition,
initialPosition = uriPosition,
isMediaStoreUri = true,
uris = images.map { it.contentUri }.toTypedArray(),
displayNames = images.map { it.displayName }.toTypedArray()
Expand Down Expand Up @@ -170,6 +175,5 @@ class ImagesAdapter(private val fragment: ImagesFragment) : MediaStoreAdapter(fr
}
}

class ItemViewHolder(val binding: ImagesItemBinding, var uriPosition: Int) :
ViewHolder(binding.root)
class ItemViewHolder(val binding: ImagesItemBinding) : ViewHolder(binding.root)
}

0 comments on commit eebb940

Please sign in to comment.