Automatically select lazy loaded items if necessary
This commit is contained in:
parent
1fa0c32142
commit
7c0d084ffc
@ -48,6 +48,7 @@ public class EpisodeItemListAdapter extends SelectableAdapter<EpisodeItemViewHol
|
||||
public void updateItems(List<FeedItem> items) {
|
||||
episodes = items;
|
||||
notifyDataSetChanged();
|
||||
updateTitle();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -195,6 +196,7 @@ public class EpisodeItemListAdapter extends SelectableAdapter<EpisodeItemViewHol
|
||||
return true;
|
||||
} else if (item.getItemId() == R.id.select_all_below) {
|
||||
setSelected(longPressedPosition + 1, getItemCount(), true);
|
||||
shouldSelectLazyLoadedItems = true;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -20,6 +20,7 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
|
||||
private final HashSet<Long> selectedIds = new HashSet<>();
|
||||
private final Activity activity;
|
||||
private OnSelectModeListener onSelectModeListener;
|
||||
boolean shouldSelectLazyLoadedItems = false;
|
||||
|
||||
public SelectableAdapter(Activity activity) {
|
||||
this.activity = activity;
|
||||
@ -34,6 +35,7 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
|
||||
onSelectModeListener.onStartSelectMode();
|
||||
}
|
||||
|
||||
shouldSelectLazyLoadedItems = false;
|
||||
selectedIds.clear();
|
||||
selectedIds.add(getItemId(pos));
|
||||
notifyDataSetChanged();
|
||||
@ -56,9 +58,10 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
|
||||
if (item.getItemId() == R.id.select_toggle) {
|
||||
boolean allSelected = selectedIds.size() == getItemCount();
|
||||
setSelected(0, getItemCount(), !allSelected);
|
||||
toggleSelectAllIcon(item, !allSelected);
|
||||
boolean selectAll = selectedIds.size() != getItemCount();
|
||||
shouldSelectLazyLoadedItems = selectAll;
|
||||
setSelected(0, getItemCount(), selectAll);
|
||||
toggleSelectAllIcon(item, selectAll);
|
||||
updateTitle();
|
||||
return true;
|
||||
}
|
||||
@ -69,6 +72,7 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
|
||||
public void onDestroyActionMode(ActionMode mode) {
|
||||
callOnEndSelectMode();
|
||||
actionMode = null;
|
||||
shouldSelectLazyLoadedItems = false;
|
||||
selectedIds.clear();
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
@ -147,7 +151,7 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
|
||||
}
|
||||
}
|
||||
|
||||
private void updateTitle() {
|
||||
void updateTitle() {
|
||||
if (actionMode == null) {
|
||||
return;
|
||||
}
|
||||
@ -166,6 +170,10 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
|
||||
}
|
||||
}
|
||||
|
||||
public boolean shouldSelectLazyLoadedItems() {
|
||||
return shouldSelectLazyLoadedItems;
|
||||
}
|
||||
|
||||
public interface OnSelectModeListener {
|
||||
void onStartSelectMode();
|
||||
|
||||
|
@ -283,6 +283,9 @@ public abstract class EpisodesListFragment extends Fragment implements EpisodeIt
|
||||
}
|
||||
episodes.addAll(data);
|
||||
onFragmentLoaded(episodes);
|
||||
if (listAdapter.shouldSelectLazyLoadedItems()) {
|
||||
listAdapter.setSelected(episodes.size() - data.size(), episodes.size(), true);
|
||||
}
|
||||
}, error -> Log.e(TAG, Log.getStackTraceString(error)),
|
||||
() -> {
|
||||
recyclerView.post(() -> isLoadingMore = false); // Make sure to not always load 2 pages at once
|
||||
|
Loading…
x
Reference in New Issue
Block a user