diff --git a/README.md b/README.md index 4d8355b..181c3b2 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ dependencies { # Usage Example of usage in xml layout ``` -com.omega_r.libs.omegarecyclerview.OmegaRecyclerView + { +public class ExpandableAdapter extends OmegaExpandableRecyclerView.Adapter { @Override protected ExGroupViewHolder provideGroupViewHolder(@NonNull ViewGroup viewGroup) { @@ -353,8 +353,8 @@ public class ExpandableAdapter extends OmegaExpandableRecyclerView.Adapter> expandableViewData) -void setItems(ExpandableViewData... expandableViewData) -void setItems(GroupProvider... groupProviders) +public final void setItems(@NonNull List> expandableViewData) +public final void setItems(ExpandableViewData... expandableViewData) +public final void setItemsAsGroupProviders(GroupProvider... groupProviders) +public final void setItemsAsGroupProviders(@NonNull List> groupProviders) ``` Your view data (group and childs) should be wrapped with ```ExpandableViewData``` using one of the following ways: @@ -387,6 +388,12 @@ public interface GroupProvider { } ``` +It is available to update only child item using +``` +// Adapter +public void notifyChildChanged(CH child) +``` + You can set expandMode and childAnimation both with xml attr and programmatically *Available expandModes are single and multiple* diff --git a/app/src/main/java/com/omega_r/omegarecyclerview/ListAdapterExample/ListAdapter.java b/app/src/main/java/com/omega_r/omegarecyclerview/ListAdapterExample/ListAdapter.java index 98c89ac..53aa337 100644 --- a/app/src/main/java/com/omega_r/omegarecyclerview/ListAdapterExample/ListAdapter.java +++ b/app/src/main/java/com/omega_r/omegarecyclerview/ListAdapterExample/ListAdapter.java @@ -3,6 +3,7 @@ import android.view.ViewGroup; import android.widget.TextView; +import androidx.annotation.NonNull; import com.omega_r.libs.omegarecyclerview.BaseListAdapter; import com.omega_r.omegarecyclerview.R; @@ -13,8 +14,9 @@ public ListAdapter(BaseListAdapter.OnItemClickListener clickListener, super(clickListener, longClickListener); } + @NonNull @Override - protected ViewHolder provideViewHolder(ViewGroup parent) { + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new SampleViewHolder(parent); } diff --git a/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/ExpandableActivity.java b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/ExpandableActivity.java index 7492751..eea5621 100644 --- a/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/ExpandableActivity.java +++ b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/ExpandableActivity.java @@ -3,6 +3,9 @@ import android.os.Bundle; import androidx.annotation.LayoutRes; import androidx.appcompat.app.AppCompatActivity; + +import android.view.View; +import android.widget.Button; import android.widget.CompoundButton; import android.widget.RadioButton; @@ -10,8 +13,12 @@ import com.omega_r.libs.omegarecyclerview.expandable_recycler_view.animation.ExpandableItemAnimator; import com.omega_r.libs.omegarecyclerview.expandable_recycler_view.animation.standard_animations.DropDownItemAnimator; import com.omega_r.libs.omegarecyclerview.expandable_recycler_view.animation.standard_animations.FadeItemAnimator; +import com.omega_r.libs.omegarecyclerview.expandable_recycler_view.data.GroupProvider; import com.omega_r.omegarecyclerview.R; +import java.util.Arrays; +import java.util.List; + import omega.com.annotations.OmegaActivity; @OmegaActivity @@ -27,6 +34,8 @@ protected OmegaExpandableRecyclerView.Adapter provideAdapter() { return new ExpandableAdapter(); } + private List> items; + @LayoutRes protected int provideContentLayoutRes() { return R.layout.activity_expandable; @@ -37,9 +46,46 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(provideContentLayoutRes()); + createItems(); + setupRecyclerView(); setupRadioButtons(); fillAdapter(); + + findViewById(R.id.button_test_update_child).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Quote quote = items.get(3).provideChilds().get(1); + quote.setQuote("UPDATED QUOTE"); + mAdapter.notifyChildChanged(quote); + } + }); + } + + private void createItems() { + items = Arrays.asList( + SimpleData.from( + new QuoteGlobalInfo(getString(R.string.group_text_1), 1500), + new Quote(getString(R.string.child_text_1)) + ), + SimpleData.from( + new QuoteGlobalInfo(getString(R.string.group_text_2), 1500), + new Quote(getString(R.string.child_text_2)) + ), + SimpleData.from( + new QuoteGlobalInfo(getString(R.string.group_text_3), 1914), + new Quote(getString(R.string.child_text_3)), + new Quote(getString(R.string.child_text_5)) + ), + SimpleData.from( + new QuoteGlobalInfo(getString(R.string.group_text_5), 1914), + new Quote(getString(R.string.child_text_1)), + new Quote(getString(R.string.child_text_2)), + new Quote(getString(R.string.child_text_3)), + new Quote(getString(R.string.child_text_4)), + new Quote(getString(R.string.child_text_5)) + ) + ); } protected void setupRecyclerView() { @@ -48,19 +94,7 @@ protected void setupRecyclerView() { } protected void fillAdapter() { - mAdapter.setItems( - SimpleData.from(new QuoteGlobalInfo(getString(R.string.group_text_1), 1500), getString(R.string.child_text_1)), - SimpleData.from(new QuoteGlobalInfo(getString(R.string.group_text_2), 1500), getString(R.string.child_text_2)), - SimpleData.from(new QuoteGlobalInfo(getString(R.string.group_text_3), 1914), - getString(R.string.child_text_3), - getString(R.string.child_text_5)), - SimpleData.from(new QuoteGlobalInfo(getString(R.string.group_text_5), 1914), - getString(R.string.child_text_1), - getString(R.string.child_text_2), - getString(R.string.child_text_3), - getString(R.string.child_text_4), - getString(R.string.child_text_5)) - ); + mAdapter.setItemsAsGroupProviders(items); } protected void setupRadioButtons() { diff --git a/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/ExpandableAdapter.java b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/ExpandableAdapter.java index ef51a72..e687e74 100644 --- a/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/ExpandableAdapter.java +++ b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/ExpandableAdapter.java @@ -7,7 +7,7 @@ import com.omega_r.libs.omegarecyclerview.expandable_recycler_view.OmegaExpandableRecyclerView; import com.omega_r.omegarecyclerview.R; -public class ExpandableAdapter extends OmegaExpandableRecyclerView.Adapter { +public class ExpandableAdapter extends OmegaExpandableRecyclerView.Adapter { @Override protected ExGroupViewHolder provideGroupViewHolder(@NonNull ViewGroup viewGroup) { @@ -54,8 +54,8 @@ class ExChildViewHolder extends ChildViewHolder { } @Override - protected void onBind(String item) { - textView.setText(item); + protected void onBind(Quote item) { + textView.setText(item.getQuote()); } } } diff --git a/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/Quote.java b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/Quote.java new file mode 100644 index 0000000..c9b1456 --- /dev/null +++ b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/Quote.java @@ -0,0 +1,30 @@ +package com.omega_r.omegarecyclerview.expandable_example.core; + +public class Quote { + private String mQuote; + + public Quote(String quote) { + mQuote = quote; + } + + public String getQuote() { + return mQuote; + } + + public void setQuote(String quote) { + mQuote = quote; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Quote quote = (Quote) o; + return mQuote.equals(quote.mQuote); + } + + @Override + public int hashCode() { + return mQuote.hashCode(); + } +} diff --git a/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/SimpleData.java b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/SimpleData.java index 7226a9a..fa40ca3 100644 --- a/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/SimpleData.java +++ b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/core/SimpleData.java @@ -7,16 +7,16 @@ import java.util.Arrays; import java.util.List; -public class SimpleData implements GroupProvider { +public class SimpleData implements GroupProvider { private QuoteGlobalInfo mQuoteGlobalInfo; - private List mQuotes; + private List mQuotes; - public static SimpleData from(QuoteGlobalInfo title, String... quotes) { + public static SimpleData from(QuoteGlobalInfo title, Quote... quotes) { return new SimpleData(title, Arrays.asList(quotes)); } - public SimpleData(QuoteGlobalInfo quoteGlobalInfo, List quotes) { + public SimpleData(QuoteGlobalInfo quoteGlobalInfo, List quotes) { mQuoteGlobalInfo = quoteGlobalInfo; mQuotes = quotes; } @@ -29,11 +29,11 @@ public void setQuoteGlobalInfo(QuoteGlobalInfo quoteGlobalInfo) { mQuoteGlobalInfo = quoteGlobalInfo; } - public List getQuotes() { + public List getQuotes() { return mQuotes; } - public void setQuotes(List quotes) { + public void setQuotes(List quotes) { mQuotes = quotes; } @@ -43,7 +43,7 @@ public QuoteGlobalInfo provideGroup() { } @Override - public List provideChilds() { + public List provideChilds() { return mQuotes; } diff --git a/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/support_sticky/DefaultStickyAdapter.java b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/support_sticky/DefaultStickyAdapter.java index 406fc48..7bafeae 100644 --- a/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/support_sticky/DefaultStickyAdapter.java +++ b/app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/support_sticky/DefaultStickyAdapter.java @@ -11,9 +11,10 @@ import com.omega_r.libs.omegarecyclerview.sticky_decoration.StickyAdapter; import com.omega_r.libs.omegarecyclerview.sticky_decoration.HeaderStickyDecoration; import com.omega_r.omegarecyclerview.R; +import com.omega_r.omegarecyclerview.expandable_example.core.Quote; import com.omega_r.omegarecyclerview.expandable_example.core.QuoteGlobalInfo; -public class DefaultStickyAdapter extends OmegaExpandableRecyclerView.Adapter implements StickyAdapter { +public class DefaultStickyAdapter extends OmegaExpandableRecyclerView.Adapter implements StickyAdapter { @Override protected ExGroupViewHolder provideGroupViewHolder(@NonNull ViewGroup viewGroup) { @@ -27,7 +28,7 @@ protected ExChildViewHolder provideChildViewHolder(@NonNull ViewGroup viewGroup) @Override public long getStickyId(int position) { - ExpandableViewData item = getItem(position); + ExpandableViewData item = getItem(position); if (item == null) return HeaderStickyDecoration.NO_STICKY_ID; Integer providedId = item.getStickyId(); return providedId == null ? HeaderStickyDecoration.NO_STICKY_ID : providedId; @@ -78,8 +79,8 @@ class ExChildViewHolder extends ChildViewHolder { } @Override - protected void onBind(String item) { - textView.setText(item); + protected void onBind(Quote item) { + textView.setText(item.getQuote()); } } diff --git a/app/src/main/res/layout/activity_expandable.xml b/app/src/main/res/layout/activity_expandable.xml index fc15ab7..2994287 100644 --- a/app/src/main/res/layout/activity_expandable.xml +++ b/app/src/main/res/layout/activity_expandable.xml @@ -29,6 +29,12 @@ android:text="@string/button_use_dropdown" android:textColor="@color/white"/> +