Skip to content

Instantly share code, notes, and snippets.

@Gongcu
Created March 5, 2020 11:13
Show Gist options
  • Select an option

  • Save Gongcu/a81fdd3b6e8b55b7ec14117ff6aff7fd to your computer and use it in GitHub Desktop.

Select an option

Save Gongcu/a81fdd3b6e8b55b7ec14117ff6aff7fd to your computer and use it in GitHub Desktop.
Loading RecyclerView와 SwipeRefreshLayout의 결합
public class RecyclerViewAdapter_post extends RecyclerView.Adapter<RecyclerViewAdapter_post.ItemViewHolder> {
private Activity activity;
private RecyclerView recyclerView;
private PostScrollToPositionListener postScrollToPositionListener; //to notify item change, so parent should know
private SwipeRefreshLayout refreshLayout;
/**
* Constructor For PostActivity
*/
public RecyclerViewAdapter_post(final Activity activity, FragmentManager fragmentManager, RecyclerView recyclerView, SwipeRefreshLayout refreshLayout) {
whatIsTarget = HOME;
this.activity = activity;
this.fragmentManager = fragmentManager;
this.recyclerView = recyclerView; this.refreshLayout = refreshLayout;
postList.clear();
currentUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
//현재 유저의 이름과 프로필 사진을 가져오는 쿼리
firestore.collection("users").document(currentUid).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
UserData userData = documentSnapshot.toObject(UserData.class);
try {
currentUserName = userData.getUserName();
currentUserProfile=userData.getProfile();
}catch (NullPointerException e){e.printStackTrace();}
}
});
collectionReference.orderBy("timestamp", Query.Direction.DESCENDING).limit(3).get().addOnCompleteListener(onCompleteListener);
recyclerView.addOnScrollListener(onScrollListener);
}
RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (!recyclerView.canScrollVertically(1) && dy > 0) {
if (whatIsTarget == TIMELINE)
collectionReference.whereEqualTo("uid", uid)
.whereLessThan("timestamp", oldestTimeStamp)
.orderBy("timestamp", Query.Direction.DESCENDING)
.limit(3).get().addOnCompleteListener(onCompleteListener);
else if (whatIsTarget == HOME)
collectionReference.whereLessThan("timestamp", oldestTimeStamp)
.orderBy("timestamp", Query.Direction.DESCENDING)
.limit(3).get().addOnCompleteListener(onCompleteListener);
}
}
};
public void swipeUpdate(final int whatIsTarget, SwipeRefreshLayout refreshLayout){
postList.clear();
uidList.clear();
if(whatIsTarget==HOME)
collectionReference.orderBy("timestamp", Query.Direction.DESCENDING).limit(3).get().addOnCompleteListener(onCompleteListener);
else
collectionReference.whereEqualTo("uid", uid).
whereGreaterThanOrEqualTo("timestamp", oldestTimeStamp).orderBy("timestamp", Query.Direction.DESCENDING).
get().addOnCompleteListener(onCompleteListener);
}
public void setPostScrollToPositionListener(PostScrollToPositionListener listener) {
this.postScrollToPositionListener = listener;
}
//Firebase Firestore의 데이터를 불러오는
OnCompleteListener<QuerySnapshot> onCompleteListener = new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
progress.progressON(activity);
for(QueryDocumentSnapshot item : task.getResult()) {
UserPost post = item.toObject(UserPost.class);
postList.add(post);
uidList.add(item.getId());
}
notifyDataSetChanged();
progress.progressOFF();
counter=post_number = postList.size();
postCounter += postList.size();
if (postList.size() > 0)
oldestTimeStamp = postList.get(postList.size() - 1).getTimestamp();
if (isFirst == FIRST) {
int position = 0;
for (UserPost post : postList) {
if (post.getTimestamp().equals(selected_item_timestamp))
break;
position++;
}
postScrollToPositionListener.onSuccessListener(position);
isFirst = 2;
}
refreshLayout.setRefreshing(false);
}
}
};
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {...}
@Override
public long getItemId(int position) {...}
@Override
public void onBindViewHolder(@NonNull final ItemViewHolder holder, final int position) {...}
@Override
public int getItemCount() {...}
private void favoriteEvent(final int position, final ImageView favoriteImageView, final TextView favoriteCountTextView) {...}
private void favoriteAlarm(String destinationUid, Long timestamp) {...}
public class ItemViewHolder extends RecyclerView.ViewHolder {
...
public ItemViewHolder(View itemView) {
super(itemView);
...
}
public void changeFavorite(final String text, final boolean favoriteOn){...}
View.OnClickListener onClickListener = new View.OnClickListener() {...};
}
private RequestListener<Drawable> requestListener = new RequestListener<Drawable>() {...};
}
public class HomeFragment extends BaseFragment {
private static final int HOME = 0;
private SwipeRefreshLayout refreshLayout;
private RecyclerView recyclerView;
private RecyclerViewAdapter_post adapter;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_post, container, false);
// Inflate the layout for this fragment
init(view);
return view;
}
public void init(View view){
refreshLayout = view.findViewById(R.id.home_fragment_layout);
recyclerView = view.findViewById(R.id.post_recyclerView);
adapter = new RecyclerViewAdapter_post(getActivity(),getActivity().getSupportFragmentManager(),recyclerView,refreshLayout);
adapter.setHasStableIds(true);
RecyclerView.ItemAnimator animator = recyclerView.getItemAnimator();
if (animator instanceof SimpleItemAnimator) {
((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
}
adapter.setPostScrollToPositionListener(new PostScrollToPositionListener() {
@Override
public void onSuccessListener(final int position) {
}
});
refreshLayout.setOnRefreshListener(refreshListener);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
}
SwipeRefreshLayout.OnRefreshListener refreshListener = new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
adapter.swipeUpdate(0,refreshLayout);
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment