Created
August 12, 2019 06:43
-
-
Save dineshmm23/926caf0a4cf7326992afc8ee3e651a21 to your computer and use it in GitHub Desktop.
FlexibleAdapter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public void createExpandableSectionsDatabaseTest(int size) { | |
databaseType = DatabaseType.EXPANDABLE_SECTIONS; | |
mItems.clear(); | |
for (int i = 0; i < size; i++) { | |
mItems.add(newExpandableSectionItemTest(i + 1));//With expansion level 0 | |
} | |
} | |
public static ExpandableHeaderItemTest newExpandableSectionItemTest(int i) { | |
ExpandableHeaderItemTest expandableItem = new ExpandableHeaderItemTest("EH" + i); | |
expandableItem.setTitle("Expandable Header " + i); | |
for (int j = 1; j <= SUB_ITEMS; j++) { | |
SubItemTest subItem = new SubItemTest(expandableItem.getId() + "-SB" + j, expandableItem); | |
subItem.setTitle("Sub Item " + j); | |
// NOTE: In case you want to retrieve the parent, you can implement ISectionable | |
// then, assign the Header: ExpandableHeaderItem instance. | |
//subItem.setHeader(expandableItem); | |
} | |
return expandableItem; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package eu.davidea.samples.flexibleadapter.items; | |
import android.util.Log; | |
import android.view.View; | |
import android.widget.ImageView; | |
import android.widget.TextView; | |
import java.util.ArrayList; | |
import java.util.List; | |
import eu.davidea.flexibleadapter.FlexibleAdapter; | |
import eu.davidea.flexibleadapter.Payload; | |
import eu.davidea.flexibleadapter.items.AbstractExpandableHeaderItem; | |
import eu.davidea.flexibleadapter.items.IExpandable; | |
import eu.davidea.flexibleadapter.items.IFlexible; | |
import eu.davidea.flexibleadapter.items.IHeader; | |
import eu.davidea.samples.flexibleadapter.R; | |
import eu.davidea.samples.flexibleadapter.items.ExpandableHeaderItem.ExpandableHeaderViewHolder; | |
import eu.davidea.viewholders.ExpandableViewHolder; | |
/** | |
* This is an experiment to evaluate how a Section with header can also be expanded/collapsed. | |
* <p>Here, it still benefits of the common fields declared in AbstractItem.</p> | |
* It's important to note that, the ViewHolder must be specified in all <diamond> signature. | |
*/ | |
public class ExpandableHeaderItemTest | |
extends AbstractExpandableHeaderItem<ExpandableHeaderItemTest.ExpandableHeaderViewHolder, SubItemTest> { | |
public String getId() { | |
return id; | |
} | |
private final String id; | |
/* Flags for FlexibleAdapter */ | |
private boolean mExpanded = false; | |
public void setTitle(String title) { | |
this.title = title; | |
} | |
private String title; | |
public ExpandableHeaderItemTest(String id) { | |
setDraggable(true); | |
//We start with header shown and expanded | |
setHidden(false); | |
setExpanded(true); | |
//NOT selectable (otherwise ActionMode will be activated on long click)! | |
setSelectable(false); | |
this.id = id; | |
} | |
@Override | |
public boolean isExpanded() { | |
return mExpanded; | |
} | |
@Override | |
public void setExpanded(boolean expanded) { | |
mExpanded = expanded; | |
} | |
@Override | |
public int getExpansionLevel() { | |
return 0; | |
} | |
@Override | |
public boolean equals(Object inObject) { | |
if (inObject instanceof ExpandableHeaderItemTest) { | |
ExpandableHeaderItemTest inItem = (ExpandableHeaderItemTest) inObject; | |
return this.id.equals(inItem.id); | |
} | |
return false; | |
} | |
@Override | |
public int getSpanSize(int spanCount, int position) { | |
return spanCount; | |
} | |
@Override | |
public int getLayoutRes() { | |
return R.layout.recycler_expandable_header_item; | |
} | |
@Override | |
public ExpandableHeaderViewHolder createViewHolder(View view, FlexibleAdapter<IFlexible> adapter) { | |
return new ExpandableHeaderViewHolder(view, adapter); | |
} | |
@Override | |
public void bindViewHolder(FlexibleAdapter<IFlexible> adapter, ExpandableHeaderViewHolder holder, int position, List<Object> payloads) { | |
if (payloads.size() > 0) { | |
Log.d(this.getClass().getSimpleName(), "ExpandableHeaderItem Payload " + payloads + " - " + getTitle()); | |
} else { | |
Log.d(this.getClass().getSimpleName(), "ExpandableHeaderItem NoPayload - " + getTitle()); | |
holder.mTitle.setText(getTitle()); | |
} | |
String subtitle = (String.format("%s subItems %s(%s)", | |
countFilteredChildren(adapter), | |
(adapter.hasFilter() ? "found " : ""), | |
(isExpanded() ? "expanded" : "collapsed"))); | |
holder.mSubtitle.setText(subtitle); | |
} | |
private String getTitle() { | |
return title; | |
} | |
private int countFilteredChildren(FlexibleAdapter<IFlexible> adapter) { | |
if (adapter.hasFilter()) { | |
String filter = adapter.getFilter(String.class); | |
int size = 0; | |
for (SubItemTest s : mSubItems) { | |
if (s.filter(filter)) size++; | |
} | |
return size; | |
} | |
return adapter.getCurrentChildren(this).size(); | |
} | |
/** | |
* Provide a reference to the views for each data item. | |
* Complex data labels may need more than one view per item, and | |
* you provide access to all the views for a data item in a view holder. | |
*/ | |
static class ExpandableHeaderViewHolder extends ExpandableViewHolder { | |
TextView mTitle; | |
TextView mSubtitle; | |
ImageView mHandleView; | |
ExpandableHeaderViewHolder(View view, FlexibleAdapter adapter) { | |
super(view, adapter, true);//True for sticky | |
mTitle = view.findViewById(R.id.title); | |
mSubtitle = view.findViewById(R.id.subtitle); | |
this.mHandleView = view.findViewById(R.id.row_handle); | |
if (adapter.isHandleDragEnabled()) { | |
this.mHandleView.setVisibility(View.VISIBLE); | |
setDragHandleView(mHandleView); | |
} else { | |
this.mHandleView.setVisibility(View.GONE); | |
} | |
} | |
} | |
@Override | |
public String toString() { | |
return "ExpandableHeaderItem[" + super.toString() + "//SubItems" + mSubItems + "]"; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package eu.davidea.samples.flexibleadapter.items; | |
import android.animation.Animator; | |
import android.content.Context; | |
import android.view.View; | |
import android.widget.ImageView; | |
import android.widget.TextView; | |
import androidx.annotation.NonNull; | |
import java.util.List; | |
import eu.davidea.flexibleadapter.FlexibleAdapter; | |
import eu.davidea.flexibleadapter.helpers.AnimatorHelper; | |
import eu.davidea.flexibleadapter.items.AbstractSectionableItem; | |
import eu.davidea.flexibleadapter.items.IFilterable; | |
import eu.davidea.flexibleadapter.items.IFlexible; | |
import eu.davidea.flexibleadapter.items.IHeader; | |
import eu.davidea.flexibleadapter.utils.FlexibleUtils; | |
import eu.davidea.samples.flexibleadapter.R; | |
import eu.davidea.viewholders.FlexibleViewHolder; | |
/** | |
* If you don't have many fields in common better to extend directly from | |
* {@link eu.davidea.flexibleadapter.items.AbstractFlexibleItem} to benefit of the already | |
* implemented methods (getter and setters). | |
*/ | |
public class SubItemTest extends AbstractSectionableItem<SubItemTest.ChildViewHolder, ExpandableHeaderItemTest> implements IFilterable<String> { | |
private final String id; | |
/** | |
* The header of this item | |
*/ | |
ExpandableHeaderItemTest header; | |
public String getTitle() { | |
return title; | |
} | |
public void setTitle(String title) { | |
this.title = title; | |
} | |
String title; | |
public SubItemTest(String id, ExpandableHeaderItemTest header) { | |
super(header); | |
setDraggable(true); | |
this.id=id; | |
} | |
@Override | |
public boolean equals(Object inObject) { | |
if (inObject instanceof SubItemTest) { | |
SubItemTest inItem = (SubItemTest) inObject; | |
return this.id.equals(inItem.id); | |
} | |
return false; | |
} | |
@Override | |
public int getLayoutRes() { | |
return R.layout.recycler_sub_item; | |
} | |
@Override | |
public ChildViewHolder createViewHolder(View view, FlexibleAdapter adapter) { | |
return new ChildViewHolder(view, adapter); | |
} | |
@Override | |
public void bindViewHolder(FlexibleAdapter<IFlexible> adapter, ChildViewHolder holder, int position, List<Object> payloads) { | |
//In case of searchText matches with Title or with an SimpleItem's field | |
// this will be highlighted | |
if (adapter.hasFilter()) { | |
Context context = holder.itemView.getContext(); | |
String filter = adapter.getFilter(String.class); | |
FlexibleUtils.highlightText(holder.mTitle, getTitle(), filter, | |
context.getResources().getColor(R.color.colorAccent_light)); | |
} else { | |
holder.mTitle.setText(getTitle()); | |
} | |
} | |
@Override | |
public boolean filter(String constraint) { | |
return getTitle() != null && getTitle().toLowerCase().trim().contains(constraint); | |
} | |
/** | |
* Provide a reference to the views for each data item. | |
* Complex data labels may need more than one view per item, and | |
* you provide access to all the views for a data item in a view holder. | |
*/ | |
static final class ChildViewHolder extends FlexibleViewHolder { | |
public ImageView mHandleView; | |
public TextView mTitle; | |
public ChildViewHolder(View view, FlexibleAdapter adapter) { | |
super(view, adapter); | |
this.mTitle = view.findViewById(R.id.title); | |
this.mHandleView = view.findViewById(R.id.row_handle); | |
if (adapter.isHandleDragEnabled()) { | |
this.mHandleView.setVisibility(View.VISIBLE); | |
setDragHandleView(mHandleView); | |
} else { | |
this.mHandleView.setVisibility(View.GONE); | |
} | |
} | |
@Override | |
public float getActivationElevation() { | |
return eu.davidea.utils.Utils.dpToPx(itemView.getContext(), 4f); | |
} | |
@Override | |
public void scrollAnimators(@NonNull List<Animator> animators, int position, boolean isForward) { | |
AnimatorHelper.scaleAnimator(animators, itemView, 0f); | |
} | |
} | |
@Override | |
public String toString() { | |
return "SubItem[" + super.toString() + "]"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment