9

मैं विवरण दृश्य करने के लिए एक सूची दृश्य से जाना चाहते हैं और इसलिए, मैं निम्नलिखित मेरी सूची में OnClickListener का उपयोग करें:टुकड़ा लेनदेन - अद्वितीय transitionNames आवश्यक हैं

@Override 
public void onClick(View view) 
{ 
    Bet bet = (Bet)view.getTag(); 
    FragmentManager fm = getActivity().getSupportFragmentManager(); 
    BetDetailFragment f = BetDetailFragment.create(bet); 
    String tag = f.getClass().getName(); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
    { 
     setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); 
     f.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); 
    } 

    FragmentTransaction ft = fm.beginTransaction() 
      .replace(R.id.frame_container, f, tag) 
      .addToBackStack(tag); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
    { 
     L.d(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo1(bet) + "|" + view.findViewById(R.id.ivLogo1)); 
     L.d(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo2(bet) + "|" + view.findViewById(R.id.ivLogo2)); 
     ft.addSharedElement(view.findViewById(R.id.ivLogo1), "1");//TransitionUtil.getTransitionNameBetLogo1(bet)); 
     ft.addSharedElement(view.findViewById(R.id.ivLogo2), "2");//TransitionUtil.getTransitionNameBetLogo2(bet)); 
    } 
    ft.commit(); 
} 

मेरे कार्यों मैं अद्वितीय नामों लौटने के लिए, दो अलग-अलग विचार, लेकिन फिर भी यह काम नहीं करता है। मैं पहले से ही अनावश्यक कार्यों को टिप्पणी की है और हाथ से वहाँ में कुछ अद्वितीय लेन-देन के नाम लिखा था ... लेकिन फिर भी, मैं पहली बार addSharedElement की पंक्ति में इस अपवाद मिलता है,:

java.lang.IllegalArgumentException: Unique transitionNames are required for all sharedElements 
     at android.support.v4.app.BackStackRecord.addSharedElement 

संपादित

साझा तत्वों के बिना, सबकुछ ठीक से काम कर रहा है ...

उत्तर

23

समस्या यह है कि addSharedElement दृश्य का लेनदेन नाम सेट नहीं करता है!

तो मेरी उदाहरण में मैं निम्नलिखित कोड के साथ सेट करने के लिए होगा:

ViewCompat.setTransitionName(view.findViewById(R.id.ivLogo1), "1"); 
ViewCompat.setTransitionName(view.findViewById(R.id.ivLogo2), "2"); 

से पहले मैं FragmentTransaction को यह दृश्य जोड़ ...

बाद में निम्नलिखित काम करता है ठीक है और उम्मीद के रूप में:

ft.addSharedElement(view.findViewById(R.id.ivLogo1), "1"); 
ft.addSharedElement(view.findViewById(R.id.ivLogo2), "2"); 
+0

इसके लिए बहुत बहुत धन्यवाद! –

0

यदि आपका onClickListener आपके टुकड़े का हिस्सा है, माता-पिता Activity नहीं, तो आप यहां कुछ गलत कर रहे हैं। आपके टुकड़े को माता-पिता की गतिविधि को सूचित करना चाहिए जो वह चाहता है और सक्रियता को इसके साथ सौदा करना चाहिए (यानी टुकड़े आदि को बदलकर)। टुकड़ा खुद को कभी नहीं करना चाहिए। अगर आपको केवल विस्तार से देखने की सूची में जाना है, तो मुझे लगता है कि आपने उस सूची से अपना विस्तार दृश्य दर्ज किया है। यदि ऐसा है, तो आपको केवल पिछली तत्व (खंड दृश्य खंड) को वापस स्टैक से पॉप करना है। देखें: https://developer.android.com/reference/android/app/FragmentManager.html

+0

बस स्पष्ट करने के लिए, केवल समस्या साझा तत्वों की एनीमेशन है ... टुकड़े बदलना और ठीक काम कर रहा है। दूसरी तरफ, आप सही हैं, गतिविधि में किया जाना चाहिए ... मैं वहां काम करने के लिए आलसी था, क्योंकि मेरा टुकड़ा प्रवाह वास्तव में आसान है ... – prom85

0

onClick

से पहले

उपयोग इस सह डी

ViewCompat.setTransitionName(holder.ivImage, "value"); 
संबंधित मुद्दे