Skip to content

Commit

Permalink
Clear the adapter instead of throwing an exception if itemBinding is …
Browse files Browse the repository at this point in the history
…null (#180)

Fixes #179
  • Loading branch information
evant authored Mar 3, 2020
1 parent b7793ce commit 6a30c42
Show file tree
Hide file tree
Showing 7 changed files with 121 additions and 83 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
### [Unreleased]
- Not having an itemBinding in xml will cause the adapter to be cleared instead of throwing an
exception (#179)
- Added convenience constructors to `BindingListViewAdapter`, `BindingViewPagerAdapter`, and
`BindingRecyclerViewAdapter` which takes the itemBinding.

### 3.2.0
- Add viewpager2 support with bindingcollectionadapter-viewpager2
- Fix bug where empty observable lists weren't being removed from a MergeObservaleList (#168)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,16 @@ public class BindingRecyclerViewAdapter<T> extends RecyclerView.Adapter<ViewHold
@Nullable
private LifecycleOwner lifecycleOwner;

public BindingRecyclerViewAdapter() {
}

/**
* Constructs a new instance with the given item binding.
*/
public BindingRecyclerViewAdapter(@NonNull ItemBinding<? super T> itemBinding) {
this.itemBinding = itemBinding;
}

@Override
public void setItemBinding(@NonNull ItemBinding<? super T> itemBinding) {
this.itemBinding = itemBinding;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,36 +24,37 @@ public static <T> void setAdapter(RecyclerView recyclerView,
BindingRecyclerViewAdapter.ItemIds<? super T> itemIds,
BindingRecyclerViewAdapter.ViewHolderFactory viewHolderFactory,
AsyncDifferConfig<T> diffConfig) {
if (itemBinding == null) {
throw new IllegalArgumentException("itemBinding must not be null");
}
BindingRecyclerViewAdapter oldAdapter = (BindingRecyclerViewAdapter) recyclerView.getAdapter();
if (adapter == null) {
if (oldAdapter == null) {
adapter = new BindingRecyclerViewAdapter<>();
} else {
adapter = oldAdapter;
if (itemBinding != null) {
BindingRecyclerViewAdapter oldAdapter = (BindingRecyclerViewAdapter) recyclerView.getAdapter();
if (adapter == null) {
if (oldAdapter == null) {
adapter = new BindingRecyclerViewAdapter<>();
} else {
adapter = oldAdapter;
}
}
}
adapter.setItemBinding(itemBinding);
adapter.setItemBinding(itemBinding);

if (diffConfig != null && items != null) {
AsyncDiffObservableList<T> list = (AsyncDiffObservableList<T>) recyclerView.getTag(R.id.bindingcollectiondapter_list_id);
if (list == null) {
list = new AsyncDiffObservableList<>(diffConfig);
recyclerView.setTag(R.id.bindingcollectiondapter_list_id, list);
adapter.setItems(list);
if (diffConfig != null && items != null) {
AsyncDiffObservableList<T> list = (AsyncDiffObservableList<T>) recyclerView.getTag(R.id.bindingcollectiondapter_list_id);
if (list == null) {
list = new AsyncDiffObservableList<>(diffConfig);
recyclerView.setTag(R.id.bindingcollectiondapter_list_id, list);
adapter.setItems(list);
}
list.update(items);
} else {
adapter.setItems(items);
}
list.update(items);
} else {
adapter.setItems(items);
}

adapter.setItemIds(itemIds);
adapter.setViewHolderFactory(viewHolderFactory);
adapter.setItemIds(itemIds);
adapter.setViewHolderFactory(viewHolderFactory);

if (oldAdapter != adapter) {
recyclerView.setAdapter(adapter);
if (oldAdapter != adapter) {
recyclerView.setAdapter(adapter);
}
} else {
recyclerView.setAdapter(null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,36 +21,37 @@ public static <T> void setAdapter(ViewPager2 viewPager,
BindingRecyclerViewAdapter.ItemIds<? super T> itemIds,
BindingRecyclerViewAdapter.ViewHolderFactory viewHolderFactory,
AsyncDifferConfig<T> diffConfig) {
if (itemBinding == null) {
throw new IllegalArgumentException("itemBinding must not be null");
}
BindingRecyclerViewAdapter oldAdapter = (BindingRecyclerViewAdapter) viewPager.getAdapter();
if (adapter == null) {
if (oldAdapter == null) {
adapter = new BindingRecyclerViewAdapter<>();
} else {
adapter = oldAdapter;
if (itemBinding != null) {
BindingRecyclerViewAdapter oldAdapter = (BindingRecyclerViewAdapter) viewPager.getAdapter();
if (adapter == null) {
if (oldAdapter == null) {
adapter = new BindingRecyclerViewAdapter<>();
} else {
adapter = oldAdapter;
}
}
}
adapter.setItemBinding(itemBinding);
adapter.setItemBinding(itemBinding);

if (diffConfig != null && items != null) {
AsyncDiffObservableList<T> list = (AsyncDiffObservableList<T>) viewPager.getTag(me.tatarka.bindingcollectionadapter2.recyclerview.R.id.bindingcollectiondapter_list_id);
if (list == null) {
list = new AsyncDiffObservableList<>(diffConfig);
viewPager.setTag(me.tatarka.bindingcollectionadapter2.recyclerview.R.id.bindingcollectiondapter_list_id, list);
adapter.setItems(list);
if (diffConfig != null && items != null) {
AsyncDiffObservableList<T> list = (AsyncDiffObservableList<T>) viewPager.getTag(me.tatarka.bindingcollectionadapter2.recyclerview.R.id.bindingcollectiondapter_list_id);
if (list == null) {
list = new AsyncDiffObservableList<>(diffConfig);
viewPager.setTag(me.tatarka.bindingcollectionadapter2.recyclerview.R.id.bindingcollectiondapter_list_id, list);
adapter.setItems(list);
}
list.update(items);
} else {
adapter.setItems(items);
}
list.update(items);
} else {
adapter.setItems(items);
}

adapter.setItemIds(itemIds);
adapter.setViewHolderFactory(viewHolderFactory);
adapter.setItemIds(itemIds);
adapter.setViewHolderFactory(viewHolderFactory);

if (oldAdapter != adapter) {
viewPager.setAdapter(adapter);
if (oldAdapter != adapter) {
viewPager.setAdapter(adapter);
}
} else {
viewPager.setAdapter(null);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,27 @@ public class BindingCollectionAdapters {
@SuppressWarnings("unchecked")
@BindingAdapter(value = {"itemBinding", "itemTypeCount", "items", "adapter", "itemDropDownLayout", "itemIds", "itemIsEnabled"}, requireAll = false)
public static <T> void setAdapter(AdapterView adapterView, ItemBinding<? super T> itemBinding, Integer itemTypeCount, List items, BindingListViewAdapter<T> adapter, @LayoutRes int itemDropDownLayout, BindingListViewAdapter.ItemIds<? super T> itemIds, BindingListViewAdapter.ItemIsEnabled<? super T> itemIsEnabled) {
if (itemBinding == null) {
throw new IllegalArgumentException("onItemBind must not be null");
}
BindingListViewAdapter<T> oldAdapter = (BindingListViewAdapter<T>) unwrapAdapter(adapterView.getAdapter());
if (adapter == null) {
if (oldAdapter == null) {
int count = itemTypeCount != null ? itemTypeCount : 1;
adapter = new BindingListViewAdapter<>(count);
} else {
adapter = oldAdapter;
if (itemBinding != null) {
BindingListViewAdapter<T> oldAdapter = (BindingListViewAdapter<T>) unwrapAdapter(adapterView.getAdapter());
if (adapter == null) {
if (oldAdapter == null) {
int count = itemTypeCount != null ? itemTypeCount : 1;
adapter = new BindingListViewAdapter<>(count);
} else {
adapter = oldAdapter;
}
}
}
adapter.setItemBinding(itemBinding);
adapter.setDropDownItemLayout(itemDropDownLayout);
adapter.setItems(items);
adapter.setItemIds(itemIds);
adapter.setItemIsEnabled(itemIsEnabled);
adapter.setItemBinding(itemBinding);
adapter.setDropDownItemLayout(itemDropDownLayout);
adapter.setItems(items);
adapter.setItemIds(itemIds);
adapter.setItemIsEnabled(itemIsEnabled);

if (oldAdapter != adapter) {
adapterView.setAdapter(adapter);
if (oldAdapter != adapter) {
adapterView.setAdapter(adapter);
}
} else {
adapterView.setAdapter(null);
}
}

Expand All @@ -56,23 +57,24 @@ private static Adapter unwrapAdapter(Adapter adapter) {
@SuppressWarnings("unchecked")
@BindingAdapter(value = {"itemBinding", "items", "adapter", "pageTitles"}, requireAll = false)
public static <T> void setAdapter(ViewPager viewPager, ItemBinding<? super T> itemBinding, List items, BindingViewPagerAdapter<T> adapter, BindingViewPagerAdapter.PageTitles<T> pageTitles) {
if (itemBinding == null) {
throw new IllegalArgumentException("onItemBind must not be null");
}
BindingViewPagerAdapter<T> oldAdapter = (BindingViewPagerAdapter<T>) viewPager.getAdapter();
if (adapter == null) {
if (oldAdapter == null) {
adapter = new BindingViewPagerAdapter<>();
} else {
adapter = oldAdapter;
if (itemBinding != null) {
BindingViewPagerAdapter<T> oldAdapter = (BindingViewPagerAdapter<T>) viewPager.getAdapter();
if (adapter == null) {
if (oldAdapter == null) {
adapter = new BindingViewPagerAdapter<>();
} else {
adapter = oldAdapter;
}
}
}
adapter.setItemBinding(itemBinding);
adapter.setItems(items);
adapter.setPageTitles(pageTitles);
adapter.setItemBinding(itemBinding);
adapter.setItems(items);
adapter.setPageTitles(pageTitles);

if (oldAdapter != adapter) {
viewPager.setAdapter(adapter);
if (oldAdapter != adapter) {
viewPager.setAdapter(adapter);
}
} else {
viewPager.setAdapter(null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,14 @@ public BindingListViewAdapter(int itemTypeCount) {
this.itemTypeCount = itemTypeCount;
}

/**
* Constructs a new instance with the given item count and item binding.
*/
public BindingListViewAdapter(int itemTypeCount, @NonNull ItemBinding<? super T> itemBinding) {
this.itemTypeCount = itemTypeCount;
this.itemBinding = itemBinding;
}

@Override
public void setItemBinding(@NonNull ItemBinding<? super T> itemBinding) {
this.itemBinding = itemBinding;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,16 @@ public class BindingViewPagerAdapter<T> extends PagerAdapter implements BindingC
private LifecycleOwner lifecycleOwner;
private List<View> views = new ArrayList<>();

public BindingViewPagerAdapter() {
}

/**
* Constructs a new instance with the given item binding.
*/
public BindingViewPagerAdapter(@NonNull ItemBinding<? super T> itemBinding) {
this.itemBinding = itemBinding;
}

@Override
public void setItemBinding(@NonNull ItemBinding<? super T> itemBinding) {
this.itemBinding = itemBinding;
Expand Down

0 comments on commit 6a30c42

Please sign in to comment.