7

मैंने रीसाइक्लिंग व्यू में एक छवि से साझा किए गए तत्व तत्व संक्रमण को एक नए टुकड़े में एक छवि में लागू किया है। RecyclerView को एक गतिविधि द्वारा होस्ट किए गए एक टुकड़े में होस्ट किया जाता है और लक्ष्य खंड किसी अन्य गतिविधि के अंदर होस्ट किया जाता है।साझा तत्व संक्रमण में अपेक्षित व्यवहार नहीं है

जब मैं अपनी छवि पर क्लिक करता हूं, संक्रमण अपेक्षा की तरह हो रहा है और मैं अपने टुकड़े में आता हूं। लेकिन जब मैं बैक बटन पर क्लिक करता हूं, तो संक्रमण मेरी छवि को मेरे रीसाइक्लिंग व्यू की पहली स्थिति में रखने की कोशिश कर रहा है, जबकि यह वर्तमान में उस छवि को प्रदर्शित कर रहा है जो आवश्यक नहीं है।

इस स्थिति से, मैंने सोचा कि यह छवि की एक सूची है जिसमें मैंने XML के अंदर एक संक्रमण नाम सेट किया है, शायद वापस जाने पर, क्योंकि सभी छवियों का एक ही संक्रमण नाम है, प्रक्रिया उलझन में है और बस पहले प्राप्त करें दिए गए नाम के साथ छवि। तो शायद मुझे गतिशील रूप से उनमें से प्रत्येक को एक अलग संक्रमण नाम देना चाहिए। मैंने लक्ष्य छवि पर भी वही नाम सेट किया है और हर बार एक नई छवि का चयन किया जाता है। लेकिन यह अभी भी काम नहीं कर रहा है। क्या कोई मेरी यह मदद कर सकता है?

mAdapter.setOnItemClickListener(new RssItemAdapter.OnItemCLickListener(){ 
    @Override 
    public void onItemClick(View view, int position) { 
     final RssItem item = mAdapter.getItem(position); 
     final RssElementIntent intent = new RssElementIntent(getActivity(), item, position); 
     // mRootView is the view of the fragment 
     final ImageView image = (ImageView) 
mRootView.findViewById(R.id.rss_element_image); 
     image.setTransitionName(getString(R.string.transition_name_rss_feed_picture) + position); 
     ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
         getActivity(), image, RssElementFragment.EXTRA_IMAGE); 
     ActivityCompat.startActivity(getActivity(), intent, options.toBundle()); 
    } 
}); 

यहाँ लक्ष्य टुकड़ा में कोड है::

rssImage.setTransitionName(getString(R.string.transition_name_rss_feed_picture) + getArguments().getInt(ARG_ELEMENT_POSITION)); 
ViewCompat.setTransitionName(rssImage, EXTRA_IMAGE); 

और यहाँ है themes.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/theme_primary</item> 
     <item name="colorPrimaryDark">@color/theme_primary_dark</item> 
     <item name="android:colorAccent">@color/theme_accent</item> 

     <!-- enable window content transitions --> 
     <item name="android:windowContentTransitions">true</item> 

     <item name="android:windowAllowEnterTransitionOverlap">true</item> 
     <item name="android:windowAllowReturnTransitionOverlap">true</item> 

     <!-- specify shared element transitions --> 
     <item name="android:windowSharedElementEnterTransition"> 
      @transition/change_image_transform 
     </item> 
     <item name="android:windowSharedElementExitTransition"> 
      @transition/change_image_transform 
     </item> 

    </style> 

यहाँ मेरी onItemClickListener अंदर कोड है संपादित करें:

मुझे मेरी त्रुटि मिली, मुझे छवि दृश्य को खंड खंड से प्राप्त हो रहा था जो मुझे मेरे रीसाइक्लिंग व्यू से एक यादृच्छिक छवि दृश्य दे रहा था, जिसका अर्थ गलत संक्रमण नाम है। तो मैंने ITemClick द्वारा दिए गए दृश्य का उपयोग किया और यह काम किया! मैं एडाप्टर के अंदर setTransitionName() भी स्थानांतरित करता हूं।

mAdapter.setOnItemClickListener(new RssItemAdapter.OnItemCLickListener(){ 
     @Override 
     public void onItemClick(View view, int position) { 
      final RssItem item = mAdapter.getItem(position); 
      final RssElementIntent intent = new RssElementIntent(getActivity(), item, position); 
      // WRONG ! 
      // final ImageView image = (ImageView) mRootView.findViewById(R.id.rss_element_image); 
      // Correct 
      final ImageView image = (ImageView) view.findViewById(R.id.rss_element_image); 

      ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
          getActivity(), image, RssElementFragment.EXTRA_IMAGE); 
      ActivityCompat.startActivity(getActivity(), intent, options.toBundle()); 
     } 
    }); 
+0

मुझे लगता है कि संक्रमण स्थिति में 'स्थिति' को जोड़ना परेशानी हो सकती है, यह मेरे मामले में 'स्थिति' के बिना ठीक काम करता है। शायद आपको संक्रमण नाम में 'स्थिति' को हटाने का प्रयास करना चाहिए। – hidro

+0

मैंने कोशिश की और मुझे अभी भी एक ही परिणाम मिल गया है ... –

+2

रीसाइक्लर व्यू के लिए अपने एडाप्टर में, बाइंडव्यूहोल्डर में, प्रत्येक संभावित साझा तत्व के लिए एक अद्वितीय संक्रमण नाम प्रति पंक्ति सेट करें। आम तौर पर, यह किसी प्रकार की एक अद्वितीय पंक्ति आईडी से आता है, लेकिन यदि आपके पास ऐसा कुछ भी नहीं है, तो आप तब तक स्थिति का उपयोग कर सकते हैं जब तक आप रीडरिंग नहीं करते हैं। "वापस" जाने पर व्यू संक्रमण नाम द्वारा खोजा जाता है। यदि आपके पास बाध्यकारी समय पर विशिष्ट रूप से पहचानने का कोई तरीका नहीं है, तो आप ढांचे को संकेत देने के लिए ऑनमैपशेयर एलिमेंट्स को ओवरराइड कर सकते हैं। –

उत्तर

8

मैं अपने त्रुटि पाया, मैं टुकड़ा rootView जो मुझे मेरे RecyclerView है, जो गलत संक्रमण नाम मतलब से एक यादृच्छिक imageView दे रहा था से imageView हो रही थी। तो मैंने ITemClick द्वारा दिए गए दृश्य का उपयोग किया और यह काम किया! मैं एडाप्टर के अंदर setTransitionName() भी ले जाता हूं।

mAdapter.setOnItemClickListener(new RssItemAdapter.OnItemCLickListener(){ 
     @Override 
     public void onItemClick(View view, int position) { 
      final RssItem item = mAdapter.getItem(position); 
      final RssElementIntent intent = new RssElementIntent(getActivity(), item, position); 
      // WRONG ! 
      // final ImageView image = (ImageView) mRootView.findViewById(R.id.rss_element_image); 
      // Correct 
      final ImageView image = (ImageView) view.findViewById(R.id.rss_element_image); 

      ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
          getActivity(), image, RssElementFragment.EXTRA_IMAGE); 
      ActivityCompat.startActivity(getActivity(), intent, options.toBundle()); 
     } 
    }); 
संबंधित मुद्दे