Android - People List - cache in memory only on this instance (deleted if app restarts) allows for fast list display. Showing again also asks for update so in some ms the list gets updated in case of changes

This commit is contained in:
Cristian Luis Duarte 2018-08-21 17:47:40 -03:00
parent af5c7a7a67
commit ed965babdf
2 changed files with 40 additions and 9 deletions

View file

@ -98,13 +98,17 @@ public class FriendsFragment extends Fragment {
mUsersAdapter.setListener(new UserListAdapter.AdapterListener() { mUsersAdapter.setListener(new UserListAdapter.AdapterListener() {
@Override @Override
public void onEmptyAdapter() { public void onEmptyAdapter(boolean shouldStopRefreshing) {
mSwipeRefreshLayout.setRefreshing(false); if (shouldStopRefreshing) {
mSwipeRefreshLayout.setRefreshing(false);
}
} }
@Override @Override
public void onNonEmptyAdapter() { public void onNonEmptyAdapter(boolean shouldStopRefreshing) {
mSwipeRefreshLayout.setRefreshing(false); if (shouldStopRefreshing) {
mSwipeRefreshLayout.setRefreshing(false);
}
} }
@Override @Override
@ -115,6 +119,8 @@ public class FriendsFragment extends Fragment {
mUsersView.setAdapter(mUsersAdapter); mUsersView.setAdapter(mUsersAdapter);
mUsersAdapter.startLoad();
mSlidingUpPanelLayout.setFadeOnClickListener(new View.OnClickListener() { mSlidingUpPanelLayout.setFadeOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {

View file

@ -37,28 +37,53 @@ public class UserListAdapter extends RecyclerView.Adapter<UserListAdapter.ViewHo
private ItemClickListener mClickListener; private ItemClickListener mClickListener;
private AdapterListener mAdapterListener; private AdapterListener mAdapterListener;
private static List<User> USERS_TMP_CACHE;
public UserListAdapter(Context c, UsersProvider usersProvider) { public UserListAdapter(Context c, UsersProvider usersProvider) {
mContext = c; mContext = c;
mInflater = LayoutInflater.from(mContext); mInflater = LayoutInflater.from(mContext);
mProvider = usersProvider; mProvider = usersProvider;
loadUsers();
} }
public void setListener(AdapterListener adapterListener) { public void setListener(AdapterListener adapterListener) {
mAdapterListener = adapterListener; mAdapterListener = adapterListener;
} }
public void startLoad() {
useTmpCachedUsers();
loadUsers();
}
private void useTmpCachedUsers() {
if (USERS_TMP_CACHE != null && USERS_TMP_CACHE.size() > 0) {
mUsers = new ArrayList<>(USERS_TMP_CACHE.size());
mUsers.addAll(USERS_TMP_CACHE);
notifyDataSetChanged();
if (mAdapterListener != null) {
if (mUsers.isEmpty()) {
mAdapterListener.onEmptyAdapter(false);
} else {
mAdapterListener.onNonEmptyAdapter(false);
}
}
}
}
public void loadUsers() { public void loadUsers() {
mProvider.retrieve(new UsersProvider.UsersCallback() { mProvider.retrieve(new UsersProvider.UsersCallback() {
@Override @Override
public void retrieveOk(List<User> users) { public void retrieveOk(List<User> users) {
mUsers = new ArrayList<>(users); mUsers = new ArrayList<>(users);
notifyDataSetChanged(); notifyDataSetChanged();
USERS_TMP_CACHE = new ArrayList<>(mUsers.size());
USERS_TMP_CACHE.addAll(mUsers);
if (mAdapterListener != null) { if (mAdapterListener != null) {
if (mUsers.isEmpty()) { if (mUsers.isEmpty()) {
mAdapterListener.onEmptyAdapter(); mAdapterListener.onEmptyAdapter(true);
} else { } else {
mAdapterListener.onNonEmptyAdapter(); mAdapterListener.onNonEmptyAdapter(true);
} }
} }
} }
@ -240,8 +265,8 @@ public class UserListAdapter extends RecyclerView.Adapter<UserListAdapter.ViewHo
} }
public interface AdapterListener { public interface AdapterListener {
void onEmptyAdapter(); void onEmptyAdapter(boolean shouldStopRefreshing);
void onNonEmptyAdapter(); void onNonEmptyAdapter(boolean shouldStopRefreshing);
void onError(Exception e, String message); void onError(Exception e, String message);
} }
} }