Skip to content

Commit 610bf4b

Browse files
committed
Ensure adapter is created along with recyclerView
Fixes an error raised by RecyclerView: github.daneren2005.dsub E/RecyclerView: No adapter attached; skipping layout
1 parent 5076b67 commit 610bf4b

File tree

1 file changed

+104
-29
lines changed

1 file changed

+104
-29
lines changed

app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java

Lines changed: 104 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package github.daneren2005.dsub.fragments;
22

33
import android.annotation.TargetApi;
4+
import android.support.annotation.NonNull;
45
import android.support.v7.app.AlertDialog;
56
import android.content.DialogInterface;
67
import android.content.Intent;
@@ -139,7 +140,7 @@ public void onSaveInstanceState(Bundle outState) {
139140
}
140141

141142
@Override
142-
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
143+
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle bundle) {
143144
Bundle args = getArguments();
144145
if(args != null) {
145146
id = args.getString(Constants.INTENT_EXTRA_NAME_ID);
@@ -172,35 +173,87 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bu
172173
albums = (List<Entry>) args.getSerializable(Constants.FRAGMENT_LIST2);
173174

174175
if(albums == null) {
175-
albums = new ArrayList<Entry>();
176+
albums = new ArrayList<>();
176177
}
177178
}
178179
}
179180

180181
rootView = inflater.inflate(R.layout.abstract_recycler_fragment, container, false);
181182

182-
refreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.refresh_layout);
183+
refreshLayout = rootView.findViewById(R.id.refresh_layout);
183184
refreshLayout.setOnRefreshListener(this);
184185

185186
if(Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_LARGE_ALBUM_ART, true)) {
186187
largeAlbums = true;
187188
}
188189

189-
recyclerView = (RecyclerView) rootView.findViewById(R.id.fragment_recycler);
190+
recyclerView = rootView.findViewById(R.id.fragment_recycler);
190191
recyclerView.setHasFixedSize(true);
191-
fastScroller = (FastScroller) rootView.findViewById(R.id.fragment_fast_scroller);
192+
fastScroller = rootView.findViewById(R.id.fragment_fast_scroller);
192193
setupScrollList(recyclerView);
193194
setupLayoutManager(recyclerView, largeAlbums);
194195

195196
if(entries == null) {
197+
entries = new ArrayList<>();
198+
}
199+
200+
if(albumListType == null || "starred".equals(albumListType)) {
201+
entryGridAdapter = new EntryGridAdapter(context, entries, getImageLoader(), largeAlbums);
202+
recyclerView.setAdapter(entryGridAdapter);
203+
entryGridAdapter.setRemoveFromPlaylist(playlistId != null);
204+
} else {
205+
setupAlbumGridAdapter();
206+
recyclerView.setAdapter(entryGridAdapter);
207+
208+
// Setup infinite loading based on scrolling
209+
final EntryInfiniteGridAdapter infiniteGridAdapter = (EntryInfiniteGridAdapter) entryGridAdapter;
210+
infiniteGridAdapter.setData(albumListType, albumListExtra, albumListSize);
211+
212+
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
213+
@Override
214+
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
215+
super.onScrollStateChanged(recyclerView, newState);
216+
}
217+
218+
@Override
219+
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
220+
super.onScrolled(recyclerView, dx, dy);
221+
222+
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
223+
int totalItemCount = layoutManager.getItemCount();
224+
int lastVisibleItem;
225+
if(layoutManager instanceof GridLayoutManager) {
226+
lastVisibleItem = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition();
227+
} else if(layoutManager instanceof LinearLayoutManager) {
228+
lastVisibleItem = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
229+
} else {
230+
return;
231+
}
232+
233+
if(totalItemCount > 0 && lastVisibleItem >= totalItemCount - 2) {
234+
infiniteGridAdapter.loadMore();
235+
}
236+
}
237+
});
238+
}
239+
240+
boolean addedHeader = setupEntryGridAdapter();
241+
242+
fastScroller.attachRecyclerView(recyclerView);
243+
context.supportInvalidateOptionsMenu();
244+
245+
scrollToPosition(addedHeader);
246+
playAll(args);
247+
248+
if(entries.size() == 0) {
196249
if(primaryFragment || secondaryFragment) {
197250
load(false);
198251
} else {
199252
invalidated = true;
200253
}
201254
} else {
202-
licenseValid = true;
203-
finishLoading();
255+
licenseValid = true;
256+
finishLoading();
204257
}
205258

206259
if(name != null) {
@@ -693,13 +746,7 @@ private void finishLoading() {
693746
entryGridAdapter = new EntryGridAdapter(context, entries, getImageLoader(), largeAlbums);
694747
entryGridAdapter.setRemoveFromPlaylist(playlistId != null);
695748
} else {
696-
if("alphabeticalByName".equals(albumListType)) {
697-
entryGridAdapter = new AlphabeticalAlbumAdapter(context, entries, getImageLoader(), largeAlbums);
698-
} else if("highest".equals(albumListType)) {
699-
entryGridAdapter = new TopRatedAlbumAdapter(context, entries, getImageLoader(), largeAlbums);
700-
} else {
701-
entryGridAdapter = new EntryInfiniteGridAdapter(context, entries, getImageLoader(), largeAlbums);
702-
}
749+
setupAlbumGridAdapter();
703750

704751
// Setup infinite loading based on scrolling
705752
final EntryInfiniteGridAdapter infiniteGridAdapter = (EntryInfiniteGridAdapter) entryGridAdapter;
@@ -732,6 +779,31 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
732779
}
733780
});
734781
}
782+
783+
boolean addedHeader = setupEntryGridAdapter();
784+
785+
recyclerView.setAdapter(entryGridAdapter);
786+
fastScroller.attachRecyclerView(recyclerView);
787+
context.supportInvalidateOptionsMenu();
788+
789+
scrollToPosition(addedHeader);
790+
playAll(getArguments());
791+
}
792+
793+
private void setupAlbumGridAdapter(){
794+
switch(albumListType){
795+
case "alphabeticalByName":
796+
entryGridAdapter = new AlphabeticalAlbumAdapter(context, entries, getImageLoader(), largeAlbums);
797+
break;
798+
case "highest":
799+
entryGridAdapter = new TopRatedAlbumAdapter(context, entries, getImageLoader(), largeAlbums);
800+
break;
801+
default:
802+
entryGridAdapter = new EntryInfiniteGridAdapter(context, entries, getImageLoader(), largeAlbums);
803+
}
804+
}
805+
806+
private boolean setupEntryGridAdapter(){
735807
entryGridAdapter.setOnItemClickedListener(this);
736808
// Always show artist if this is not a artist we are viewing
737809
if(!artist) {
@@ -747,7 +819,7 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
747819
if(albumListType == null && (!artist || artistInfo != null || artistInfoDelayed != null) && (share == null || entries.size() != albums.size())) {
748820
View header = createHeader();
749821

750-
if(header != null) {
822+
if (header != null) {
751823
if (artistInfoDelayed != null) {
752824
final View finalHeader = header.findViewById(R.id.select_album_header);
753825
final View headerProgress = header.findViewById(R.id.header_progress);
@@ -780,31 +852,24 @@ protected void done(Void result) {
780852
addedHeader = true;
781853
}
782854
}
855+
return addedHeader;
856+
}
783857

784-
int scrollToPosition = -1;
858+
private void scrollToPosition(boolean addedHeader){
859+
int scrollPosition = -1;
785860
if(lookupEntry != null) {
786861
for(int i = 0; i < entries.size(); i++) {
787862
if(lookupEntry.equals(entries.get(i).getTitle())) {
788-
scrollToPosition = i;
863+
scrollPosition = i;
789864
entryGridAdapter.addSelected(entries.get(i));
790865
lookupEntry = null;
791866
break;
792867
}
793868
}
794869
}
795870

796-
recyclerView.setAdapter(entryGridAdapter);
797-
fastScroller.attachRecyclerView(recyclerView);
798-
context.supportInvalidateOptionsMenu();
799-
800-
if(scrollToPosition != -1) {
801-
recyclerView.scrollToPosition(scrollToPosition + (addedHeader ? 1 : 0));
802-
}
803-
804-
Bundle args = getArguments();
805-
boolean playAll = args.getBoolean(Constants.INTENT_EXTRA_NAME_AUTOPLAY, false);
806-
if (playAll && !restoredInstance) {
807-
playAll(args.getBoolean(Constants.INTENT_EXTRA_NAME_SHUFFLE, false), false, false);
871+
if(scrollPosition != -1) {
872+
recyclerView.scrollToPosition(scrollPosition + (addedHeader ? 1 : 0));
808873
}
809874
}
810875

@@ -830,6 +895,16 @@ private void playAll(final boolean shuffle, final boolean append, final boolean
830895
}
831896
}
832897

898+
private void playAll(Bundle args){
899+
boolean playAll = false;
900+
if (args != null) {
901+
playAll = args.getBoolean(Constants.INTENT_EXTRA_NAME_AUTOPLAY, false);
902+
}
903+
if (playAll && !restoredInstance) {
904+
playAll(args.getBoolean(Constants.INTENT_EXTRA_NAME_SHUFFLE, false), false, false);
905+
}
906+
}
907+
833908
private List<Integer> getSelectedIndexes() {
834909
List<Entry> selected = entryGridAdapter.getSelected();
835910
List<Integer> indexes = new ArrayList<Integer>();

0 commit comments

Comments
 (0)