2016-05-14 7 views
6

यह मेरा ExpandableRecyclerAdapter एडाप्टरExpandableRecyclerAdapter कैसे जबकि एक आइटम के विस्तार ऊपर ले जाने के आइटम के लिए मजबूर करने

public class MyAdapter extends ExpandableRecyclerAdapter<MyAdapter.ProductParentViewHolder, MyAdapter.ProductChildViewHolder> { 

    private LayoutInflater mInflater; 
    private Context context; 
    private List<? extends ParentListItem> mParentItemList; 

    public MyAdapter(Context context, List<ParentListItem> itemList) { 
     super(itemList); 
     mInflater = LayoutInflater.from(context); 
     this.context = context; 
     this.mParentItemList = itemList; 
    } 

    @Override 
    public ProductParentViewHolder onCreateParentViewHolder(ViewGroup viewGroup) { 
     View view = mInflater.inflate(R.layout.list_item_crime_parent, viewGroup, false); 
     return new ProductParentViewHolder(view); 
    } 

    @Override 
    public ProductChildViewHolder onCreateChildViewHolder(ViewGroup viewGroup) { 
     View view = mInflater.inflate(R.layout.list_item_crime_child, viewGroup, false); 
     return new ProductChildViewHolder(view); 
    } 

    @Override 
    public void onBindParentViewHolder(ProductParentViewHolder crimeParentViewHolder, int i, ParentListItem parentListItem) { 
     Product product = (Product) parentListItem; 
     crimeParentViewHolder.productName.setText(product.getBrandName() + " " + product.getProductName()); 
     Glide.with(context) 
       .load(product.getProductImagePath()) 
       .placeholder(R.drawable.placeholder) 
       .error(R.drawable.placeholder) 
       .into(crimeParentViewHolder.thumbnail); 
    } 

    @Override 
    public void onBindChildViewHolder(ProductChildViewHolder productChildViewHolder, int i, Object childListItem) { 
     final ProductVariant productVariant = (ProductVariant) childListItem; 
     productChildViewHolder.mCrimeDateText.setText(productVariant.getVariantName()); 

     productChildViewHolder.variantMrp.setText(context.getString(R.string.positive_amount, productVariant.getMRP())); 
     productChildViewHolder.variantMrp.setPaintFlags(productChildViewHolder.variantMrp.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
     productChildViewHolder.variantSellPrice.setText(context.getString(R.string.positive_amount, productVariant.getSellPrice())); 


     //productChildViewHolder.variantMrp.setText(productVariant.getMRP().toString()); 
     //productChildViewHolder.variantSellPrice.setText(productVariant.getSellPrice().toString()); 


     if (productVariant.getInCart() == 0) { 
      productChildViewHolder.btnProductDetailAddToCart.setVisibility(View.VISIBLE); 
      productChildViewHolder.btnProductDetailMinus.setVisibility(View.GONE); 
      productChildViewHolder.btnProductDetailQty.setVisibility(View.GONE); 
      productChildViewHolder.btnProductDetailPlus.setVisibility(View.GONE); 

     } else { 
      productChildViewHolder.btnProductDetailAddToCart.setVisibility(View.GONE); 
      productChildViewHolder.btnProductDetailMinus.setVisibility(View.VISIBLE); 
      productChildViewHolder.btnProductDetailQty.setVisibility(View.VISIBLE); 
      productChildViewHolder.btnProductDetailPlus.setVisibility(View.VISIBLE); 

     } 
     int quantity = productVariant.getInCart(); 
     productChildViewHolder.btnProductDetailQty.setText(Integer.toString(quantity)); 

     productChildViewHolder.btnProductDetailAddToCart.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       productVariant.setInCart(1); 
       //Utility.loadShoppingCartItems(); 
       notifyDataSetChanged(); 
       invalidateOptionsMenu(); 
       //holder.db.addItem(new CartItem(1, productVariant.getProductID(), productVariant.getVariantID(), 1)); 

      } 
     }); 

     productChildViewHolder.btnProductDetailPlus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       productVariant.setInCart(1 + productVariant.getInCart()); 
       notifyDataSetChanged(); 
       invalidateOptionsMenu(); 
       //if (productVariant.getInCart() > 0) { 
       //int count = holder.db.updateSingleRow(productVariant.getProductID(), productVariant.getVariantID(), productVariant.getInCart()); 
       //} 
      } 
     }); 

     productChildViewHolder.btnProductDetailMinus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       productVariant.setInCart(productVariant.getInCart() - 1); 
       notifyDataSetChanged(); 
       invalidateOptionsMenu(); 
       if (productVariant.getInCart() == 0) { 
        //int count = holder.db.deleteSingleRow(productVariant.getProductID(), productVariant.getVariantID()); 
       } else if (productVariant.getInCart() > 0) { 
        //int count = holder.db.updateSingleRow(productVariant.getProductID(), productVariant.getVariantID(), productVariant.getInCart()); 
       } 
       //Utility.displayToast(holder.db.getItemsCount() + ""); 
      } 

     }); 

     //crimeChildViewHolder.mCrimeSolvedCheckBox.setChecked(productVariant.isSolved()); 
    } 

    public class ProductParentViewHolder extends ParentViewHolder { 
     private static final float INITIAL_POSITION = 0.0f; 
     private static final float ROTATED_POSITION = 180f; 
     private final boolean HONEYCOMB_AND_ABOVE = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; 

     public TextView productName; 
     public ImageView thumbnail; 
     public ImageButton mParentDropDownArrow; 

     public ProductParentViewHolder(View itemView) { 
      super(itemView); 

      productName = (TextView) itemView.findViewById(R.id.productName); 
      thumbnail = (ImageView) itemView.findViewById(R.id.thumbnail); 
      // mParentDropDownArrow = (ImageButton) itemView.findViewById(R.id.parent_list_item_expand_arrow); 
     } 

     @SuppressLint("NewApi") 
     @Override 
     public void setExpanded(boolean expanded) { 
      super.setExpanded(expanded); 
      if (!HONEYCOMB_AND_ABOVE) { 
       return; 
      } 

      if (expanded) { 
       // mParentDropDownArrow.setRotation(ROTATED_POSITION); 
      } else { 
       // mParentDropDownArrow.setRotation(INITIAL_POSITION); 
      } 
     } 
    } 

    public class ProductChildViewHolder extends ChildViewHolder { 

     public TextView mCrimeDateText; 
     public TextView variantMrp; 
     public TextView variantSellPrice; 
     public Button btnProductDetailAddToCart, btnProductDetailPlus, btnProductDetailMinus; 
     public TextView btnProductDetailQty; 


     public ProductChildViewHolder(View itemView) { 
      super(itemView); 

      mCrimeDateText = (TextView) itemView.findViewById(R.id.variantName); 
      variantMrp = (TextView) itemView.findViewById(R.id.productVariantMrp); 
      variantSellPrice = (TextView) itemView.findViewById(R.id.productVariantSellPrice); 
      btnProductDetailAddToCart = (Button) itemView.findViewById(R.id.btnProductDetailAddToCart); 
      btnProductDetailPlus = (Button) itemView.findViewById(R.id.btnProductDetailPlus); 
      btnProductDetailMinus = (Button) itemView.findViewById(R.id.btnProductDetailMinus); 
      btnProductDetailQty = (TextView) itemView.findViewById(R.id.btnProductDetailQty); 

     } 
    } 
} 

है जब मैं पृष्ठ के नीचे हूँ और आइटम वह फैलता पर क्लिक करें, लेकिन exapnded बच्चे आइटम के लिए शो नहीं है उपयोगकर्ता क्योंकि यह स्क्रीन में नीचे है।

मैं उस आइटम को स्क्रीन में ले जाना चाहता हूं और विस्तारित आइटम को उपयोगकर्ता को दिखाना चाहता हूं।

मैं यह कैसे कर सकता हूं?

उत्तर

0

अपने विस्तारणीय सूचीदृश्य क्लिक श्रोता में इस कोड का उपयोग करें। Liket कुछ करो अपने

yourExpandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { 
     @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
     @Override 
     public boolean onGroupClick(final ExpandableListView parent, View v, final int groupPosition, long id) { 
      .... 
      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        parent.smoothScrollToPositionFromTop(groupPosition + 1, 0); 
       } 
      },100); 
      .... 
      return true; 
     } 
    }); 
1

आप बस विधि setSelectedGroup()

expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { 
      @Override 
      public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 
       expandableListView.setSelectedGroup(groupPosition); 
       return true; 
      } 
     }); 

उपयोग कर सकते हैं इस शीर्ष

संपादित अंत में मैं के लिए एक समाधान के साथ बाहर आया करने के लिए चयनित समूह चले जाएँगे आपका विस्तारणीय रीसाइक्लिंग एडाप्टर भी। बस इस विधि को अपने एडाप्टर कार्यान्वयन के अंदर रखें। इसके अलावा आपको एडाप्टर के अंदर रीसाइक्लर व्यू के संदर्भ की आवश्यकता होगी जिसे आप प्रारंभ करने के समय एडाप्टर में भेज सकते हैं।

int lastPos = -1; 
@Override 
public void onParentListItemExpanded(int position) { 
    List<? extends ParentListItem> parentItemList = this.getParentItemList(); 
    collapseAllParents(); 
    int finalPos = position; 
    if (lastPos != -1 && lastPos < position) { 
     finalPos = position - parentItemList.get(lastPos).getChildItemList().size(); 
    } 
    expandParent(finalPos); 
    mRecyclerView.smoothScrollToPosition(finalPos); 
    lastPos = position; 
} 

मैं https://github.com/bignerdranch/expandable-recycler-view/issues/156 पर इस मुद्दे को मिल गया। हालांकि वहां दिया गया समाधान काम नहीं करता था। उसमें थोड़ा tweaking इसे काम करते हैं।

+0

आपका समाधान expandableListView के लिए अच्छा है। लेकिन मैं विस्तारणीय रीसाइक्लिंग व्यू का उपयोग कर रहा हूं (सूची दृश्य नहीं)। कृपया इस लिंक को जांचें। https://www.bignerdranch.com/blog/expand-a-recyclerview-in-four-steps/ –

+0

ExpandableRecyclerView के समाधान को अपडेट किया गया। –

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

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