Created
March 5, 2020 11:13
-
-
Save Gongcu/a81fdd3b6e8b55b7ec14117ff6aff7fd to your computer and use it in GitHub Desktop.
Loading RecyclerView와 SwipeRefreshLayout의 결합
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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>() {...}; | |
| } | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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