Обратное изображение Переход от одного действия к другому не работает

Я делаю приложение, в котором часть его функциональных возможностей заключается в отображении изображений из галереи изображений в окне просмотра, которое может пролистывать все изображения. Я использую непрерывный переход общих элементов для изображений, если я нажимаю на изображение и не проводите пальцем влево или вправо, он правильно переходит к предыдущему действию, когда я нажимаю кнопку "Назад", но если я провожу изображение вправо и нажимаю кнопку "Назад", он возвращается в правильное положение, но с изображением после него, если я проведу пальцем влево, он вернется в правильное положение, но с изображением перед ним.

Примечание: я использую скольжение для загрузки изображений. Переход происходит от активности к действию, а не от фрагмента к фрагменту, что, как я считаю, является проблемой, я пытался воспроизвести пример из документации Android, но с действиями, а не фрагментами. В моем sharedelementscallback в действии ShowImage отсутствуют некоторые строки кода потому что я не знаю, какие методы вызывать, похожие на те, что указаны в документации.
Я использую viewpager, а не viewpager2, поскольку он все еще глючит. AllPicturesView Activity показывает все изображения, а ShowImage Activity показывает отдельные
изображения в окне просмотра при нажатии на изображение.ShowImageViewPagerAdapter - это адаптер
ShowImage, который реализует перелистывание страниц просмотра.

Действие AllPicturesView, показывающее sharedEmentCallback

 public void setMyExitSharedElementCallback() {
        setExitSharedElementCallback(

                new SharedElementCallback() {
                    @Override
                    public void onMapSharedElements(
                            final List<String> names, final Map<String, View> sharedElements) {
                        // Locate the ViewHolder for the clicked position.


                                final FastScrollRecyclerView.ViewHolder selectedViewHolder = fastScrollRecyclerView
                                        .findViewHolderForAdapterPosition(PictureFolderManager.position);
                                if (selectedViewHolder == null || selectedViewHolder.itemView == null) {

                                    return;
                                }

                                // Map the first shared element name to the child ImageView.

                   sharedElements.put(names.get(0),
                          selectedViewHolder.itemView.findViewById(R.id.profile_image2));








                    };
                });}

ShowImageViewAdapter

public ShowImageViewPagerAdapter(Context context, List<String> images, Integer pos) {
    this.context = context;
    this.images = images;
    this.pos=pos;
    options = new RequestOptions()
            .placeholder(R.color.black)
            .error(R.color.black)
            .dontTransform()
            .skipMemoryCache(true)

             //.priority(Priority.IMMEDIATE)
            .diskCacheStrategy(DiskCacheStrategy.NONE);

}
@Override
public int getCount() {
    return images.size();
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
   // view=view.
    return view==object;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
    container.removeView((View)object);//removes the root layout in custom layout
}

@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    layoutInflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    itemView=layoutInflater.inflate(R.layout.viewpagerlayout,container,false);
     photoView =itemView.findViewById(R.id.photoView);
     photoView.setTransitionName(images.get(PictureFolderManager.position));

    Glide.with(container).load(images.get(position)).listener(new RequestListener<Drawable>() {


        @Override
        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
            ((Activity) context).startPostponedEnterTransition();
            return false;
        }

        @Override
        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
            ((Activity) context).startPostponedEnterTransition();
            return false;
        }
    }).into(photoView);



    //photoView.setImageURI(Uri.parse(images.get(position)));



    container.addView(itemView);
    return itemView;
}
/*
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.viewpagerlayout, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.photoView.setTransitionName(images.get(position));

    //photoView.setImageURI(Uri.parse(images.get(position)));
    Toast.makeText(context,String.valueOf(position),Toast.LENGTH_SHORT).show();


    Glide.with((Activity)context).load(images.get(position)).listener(new RequestListener<Drawable>() {


        @Override
        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
            ((Activity) context).startPostponedEnterTransition();
            return false;
        }

        @Override
        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
            ((Activity) context).startPostponedEnterTransition();
            return false;
        }
    }).into(holder.photoView);

}

@Override
public int getItemCount() {
    return images.size();
}



public class  ViewHolder extends RecyclerView.ViewHolder{

    PhotoView photoView;

    public ViewHolder(View itemView){
        super(itemView);
        photoView =itemView.findViewById(R.id.photoView);

    }


}*/

}## ShowImage Activity, показывающее sharedElementCallback ##

 public void setMyEnterSharedElementCallback() {
    setEnterSharedElementCallback(
            new SharedElementCallback() {
                @Override
                public void onMapSharedElements(
                        final List<String> names, final Map<String, View> sharedElements) {
                    // Locate the image view that is currently visible). To locate call instantiateItem with the selection position.
                    

                    // Map the first shared element name to the child ImageView.
                  
                    
                sharedElements.put(names.get(0), findViewById(R.id.photoView));

                        }


                });
            }

0 ответов