2015-03-15 11 views
6

विस्तार हो रहा है, तो मैं recyclerview यह ठीक फैलता है लेकिन किसी भी आइटम को विस्तृत जब मैं recylerview मैंने पाया अन्य मदों भी विस्तार की वजह से रीसाइक्लिंग यह विस्तृत आकार का मूल एकrecyclerview आइटम

public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.MyViewHolder> implements View.OnClickListener { 

    private LayoutInflater inflater; 
    private Context mcontext; 
    private int mOriginalHeight = 0; 
    private boolean mIsViewExpanded = false; 

    public FeedAdapter(Context context) { 
     inflater = LayoutInflater.from(context); 
     mcontext = context; 

    } 


    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 

     View view = inflater.inflate(R.layout.custom_row, viewGroup, false); 
     MyViewHolder holder = new MyViewHolder(view); 
     holder.frame.setOnClickListener(this); 


     return holder; 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder myViewHolder, int i) { 


    } 

    @Override 
    public int getItemCount() { 
     return 100; 
    } 

    @Override 
    public void onClick(final View v) { 
     if (mOriginalHeight == 0) { 
      mOriginalHeight = v.getHeight(); 
     } 
     ValueAnimator valueAnimator; 
     if (v.getHeight() < (mOriginalHeight + (int) (mOriginalHeight * 1.5))) { 
      valueAnimator = ValueAnimator.ofInt(mOriginalHeight, mOriginalHeight + (int) (mOriginalHeight * 1.5)); 
     } else { 
      valueAnimator = ValueAnimator.ofInt(mOriginalHeight + (int) (mOriginalHeight * 1.5), mOriginalHeight); 
     } 
     valueAnimator.setDuration(300); 
     valueAnimator.setInterpolator(new LinearInterpolator()); 
     valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      public void onAnimationUpdate(ValueAnimator animation) { 
       Integer value = (Integer) animation.getAnimatedValue(); 
       v.getLayoutParams().height = value.intValue(); 
       v.requestLayout(); 
      } 
     }); 
     valueAnimator.start(); 

    } 

    class MyViewHolder extends RecyclerView.ViewHolder { 


     FrameLayout frame; 

     public MyViewHolder(View itemView) { 

      super(itemView); 
      frame = (FrameLayout) itemView.findViewById(R.id.base); 

     } 
    } 
} 

नहीं ले लिया के लिए नीचे स्क्रॉल तो मैं इसे कैसे ठीक कर सकता हूं और वस्तुओं को विस्तार और संक्षिप्त करने का एक बेहतर तरीका भी है?

+0

क्या आप विस्तार से बता सकते हैं कि आपने प्रभाव कैसे प्राप्त किया? – borax12

+0

जो कोड मैं उपयोग करता हूं वह कुशल नहीं था क्योंकि यह सेल को एक विशिष्ट आकार में फैलाता है। कोशिकाओं का विस्तार करने का एक बेहतर तरीका कोड का उपयोग करना है [यहां] (http://stackoverflow.com/a/13381228/4561402/) यह सामग्री को लपेटने के लिए फैलाता है, क्योंकि कोशिकाएं एक ही ऊंचाई के नहीं हैं –

+0

@ मोहाबेलमहदी क्या आप पूरे कामकाजी समाधान प्रदान कर सकते हैं !! PLease – goonerDroid

उत्तर

8

मैं एक ही मुद्दे में भाग गया। यह ViewHolderPattern की वजह से होता है।

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#isRecyclable%28%29

एंड्रॉयड दृश्य रीसायकल होगा, regardlessly अगर यह या विस्तारित नहीं है। तो एंड्रॉइड को बताएं कि यदि आपका दृश्य विस्तारित है, तो यह पुन: प्रयोज्य नहीं है।

आपका ViewHolder कक्षा में जोड़ें:

public MyViewHolder(View itemView) { 

    super(itemView); 
    frame = (FrameLayout) itemView.findViewById(R.id.base); 

    frame.setTag(this); // to get a reference to viewholder later on 
} 

आपका OnClick विधि में जोड़ें:

@Override 

public void onClick(final View v) { 

    MyViewHolder holder = (MyViewHolder) v.getTag(); 
    holder.setIsRecyclable(false); 


    if (mOriginalHeight == 0) { 
     mOriginalHeight = v.getHeight(); 
    } 
    ValueAnimator valueAnimator; 
    ... 
} 

यह आपकी समस्या का समाधान करना चाहिए। दृश्य को फिर से विस्तारित करने के बाद "setIsRecyclable()" को फिर से सही करने के लिए याद रखें ताकि एंड्रॉइड इसे रीसायकल कर सके। आशा है कि मैं मदद कर सकता हूं।

चीयर्स

Florestan

+0

धन्यवाद, ठीक काम किया –

0

तुम बस अधिकतम पठनीयता पाने के लिए अपने कोड बदल सकते हैं। इसलिए आपको मूल्य एनिमेटर के बजाय notifyItemChanged() विधि का उपयोग करना होगा। इसके लिए my answer देखें। आप इसे करके बहुत समय बचा सकते हैं।

संबंधित मुद्दे