0

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

просмотр изображений в строке файла XML

<ImageView 
    android:id="@+id/iv_album_thumbnail" 
    android:layout_width="match_parent" 
    android:layout_height="160dip" 
    android:layout_gravity="center" 
    android:transitionName="image_transit" 
    android:scaleType="centerCrop" 
    tools:ignore="ContentDescription" 
    android:src="@drawable/img_default" 
    android:gravity="center" /> 

вид изображения во втором фрагменте

<ImageView 
    android:id='@+id/iv_album_thumbnail' 
    android:layout_width="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_height="wrap_content" 
    android:transitionName="image_transit" 
    tools:ignore="ContentDescription,UnusedAttribute" 
    android:layout_marginTop="60dip" 
    android:layout_alignParentTop="true" 
    android:src="@drawable/placeholder" /> 

по методу щелчка

public void onAlbumClicked(RecyclerViewAdapter.ViewHolder holder, int position) { 

    SongListFragment kittenDetails = SongListFragment.newInstance(aList.get(position)); 

    // Note that we need the API version check here because the actual transition classes (e.g. Fade) 
    // are not in the support library and are only available in API 21+. The methods we are calling on the Fragment 
    // ARE available in the support library (though they don't do anything on API < 21) 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     kittenDetails.setSharedElementEnterTransition(new DetailsTransition()); 
     kittenDetails.setEnterTransition(new Fade()); 
     setExitTransition(new Fade()); 
     kittenDetails.setSharedElementReturnTransition(new DetailsTransition()); 
    } 

    getActivity().getSupportFragmentManager() 
      .beginTransaction() 
      .addSharedElement(holder.imgPicture, "image_transit") 
      .setCustomAnimations(R.anim.fade_in, R.anim.fade_out) 
      .replace(R.id.root, kittenDetails) 
      .addToBackStack(null) 
      .commit(); 
} 

если есть только один товар в recyclerview, он работает отлично, но когда есть более одного предмета в recyclerview, никакого эффекта совсем не может, может кто-нибудь захочет смородину меня.

ответ

1

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

Вы должны установить его только щелкнул подряд:

  • удалить атрибут android:transitionName из строки XML.
  • добавить ViewCompat.SetTransitionName(holder.imgPicture, "image_transit");
+0

Спасибо @bwt, но можете ли вы сказать мне, Whee я должен добавить 'SetTransitionName' в моем коде? –

+0

Я бы поместил его в 'if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP) {' block – bwt

+0

yaa спасибо, работая красиво Спасибо! еще раз –

Смежные вопросы