Проблема перехода между общими элементами не работает между viewpage и recycleview, когда я выбираю другую страницу на странице просмотра - PullRequest
0 голосов
/ 04 марта 2019

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

, кстати, общий элемент работает очень хорошо (когда я нажимаю на изображение в режиме просмотра корзины, общий элемент работает с изображением в пейджере представления), ноОсновная проблема, из-за которой я задаю этот вопрос, заключается в том, что при выборе другого изображения на странице просмотра, общий элемент не работает, и он переходит из общего элемента со старым изображением в режиме повторного просмотра (извините за любые лексические ошибки, потому что английский не мой исходный язык).1003 *

Адаптер повторного просмотра:

public class GridAdapter extends RecyclerView.Adapter<GridAdapter.GridViewHolder> {

    int lastAnimatedPosition=-1;
    Context context;
    String[] data;
    AssetManager as;
    FragmentManager fragmentManager;

    public GridAdapter(Context context,String[] data,AssetManager as, FragmentManager fragmentManager) {
        this.context=context;
        this.data=data;
        this.as=as;
        this.fragmentManager=fragmentManager;
    }

    @Override
    public GridAdapter.GridViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.chantion_gridview,parent,false);
        GridViewHolder Holder=new GridViewHolder(view);
        return Holder;
    }


    private void runEnterAnimation(View view, int position) {
        if (position >= data.length - 1) {
            return;
        }

        if (position > lastAnimatedPosition) {
            lastAnimatedPosition = position;
            view.setTranslationY(GlobalFunctions.getScreenHeight(view.getContext()));
            view.animate()
                    .translationY(0)
                    .setInterpolator(new DecelerateInterpolator(3.f))
                    .setDuration(700)
                    .start();
        }
    }


    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public void onBindViewHolder(final GridAdapter.GridViewHolder holder, final int position) {

        //runEnterAnimation(holder.itemView, position);
        InputStream inputStream=null;
        try{

             inputStream=as.open("imagesTroll/"+position+".jpg");

        }catch (IOException io){

        }
        int width = 200;
        int height = 200;
        LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
        holder.imageTroll.setLayoutParams(parms);
        holder.imageTroll.setImageBitmap(BitmapFactory.decodeStream(inputStream));
        holder.imageTroll.setTransitionName("transition"+position);
        holder.imageTroll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle bundle=new Bundle();
                bundle.putStringArray("images",data);
                bundle.putInt("position",position);
                Fragment fragment=new FragmentViewPager();
                //setUp shared Element
                Transition transition=TransitionInflater.from(context)
                .inflateTransition(R.transition.mova);
                fragment.setSharedElementEnterTransition(transition);
                fragment.setSharedElementReturnTransition(transition);
                fragment.setArguments(bundle);
                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame,fragment)
                        .addSharedElement(holder.imageTroll, ViewCompat.getTransitionName(holder.imageTroll))
                        .addToBackStack(null)
                        .commit();
            }
        });
    }



    @Override
    public int getItemCount() {
        return data.length;
    }




    class GridViewHolder extends RecyclerView.ViewHolder{


        ImageButton imageTroll;


        public GridViewHolder(View itemView) {
            super(itemView);
            imageTroll=itemView.findViewById(R.id.imageView);

        }

    }
}

Адаптер ViewPager:

public class ViewPagerAdapter extends PagerAdapter {

    String[] images;
    int position;
    Context context;
    LayoutInflater layoutInflater;
    ViewPagerAdapter(Context context,String[] images,int position){
        this.context=context;
        this.images=images;
        this.position=position;
    }






    @Override
    public int getCount() {
        return images.length;
    }
    public static int getScreenWidth() {
        return Resources.getSystem().getDisplayMetrics().widthPixels;
    }

    public static int getScreenHeight() {
        return Resources.getSystem().getDisplayMetrics().heightPixels;
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        layoutInflater=(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        View view=layoutInflater.inflate(R.layout.chantion_view_pager,container,false);


        AssetManager as=context.getAssets();
        ImageView imagePost=view.findViewById(R.id.imagePost);
        imagePost.setTransitionName("transition"+position);

        int width = getScreenWidth();
        int height = (int)(getScreenHeight()-getScreenHeight()*0.5);
        LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
        imagePost.setLayoutParams(parms);


        InputStream inputStream=null;
        try{

            inputStream=as.open("imagesTroll/"+position+".jpg");


        }catch (IOException io){

        }

        imagePost.setImageBitmap(BitmapFactory.decodeStream(inputStream));








        AdView adView = new AdView(context);
        AdSize adSize=new AdSize(getScreenWidth(),100);
        adView.setAdSize(adSize);
        adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");

        AdView mAdView = view.findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        container.addView(view);
        return view;
    }


    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((LinearLayout)object);
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
        return (view==(LinearLayout)o);
    }
}

Я надеюсь, что любой инженер поможет мне, потому что эта проблема останавливает мою обработку.

...