У меня есть адаптер фрагмента для повторного просмотра, и, как мы знаем для общего элемента, мы должны использовать значение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);
}
}
Я надеюсь, что любой инженер поможет мне, потому что эта проблема останавливает мою обработку.