Обновление элементов при прокрутке пользователем вниз в SwipeRefreshLayout - PullRequest
0 голосов
/ 26 марта 2020

У меня есть SwipeRefreshLayout на RecyclerView, я хочу, чтобы элементы обновляли sh, когда пользователь прокручивает страницу, а не просто опускается сверху вниз каждый раз. Мне нужно что-то вроде Instagram или Facebook, чтобы сообщения загружались, когда пользователь прокручивал страницу вниз. Чтобы пользователю не приходилось приходить снова и снова, чтобы обновить sh и загрузить больше сообщений

Вот мой XML код:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/bar">

</com.google.android.material.appbar.AppBarLayout>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/swiperefresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/bar">
    <androidx.core.widget.NestedScrollView
        android:id="@+id/scrollview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/bar">

            <androidx.recyclerview.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/bar"
                android:id="@+id/recycler_view_posts"/>
    </androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

</RelativeLayout>

Вот мой фрагмент кода:

public class HomeFragment extends Fragment {
//POSTS
private RecyclerView recyclerViewPosts;
private PostAdapter postAdapter;
private List<Post> postLists;
private List<String> followingList;
private Context mContext;
private static final int TOTAL_NUMBER_OF_ITEMS_TO_LOAD = 5;
private SwipeRefreshLayout swipeRefreshLayout;
private int currentPage = 1;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);

//POSTS
recyclerViewPosts = view.findViewById(R.id.recycler_view_posts);
recyclerViewPosts.setHasFixedSize(true);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
recyclerViewPosts.setLayoutManager(linearLayoutManager);
postLists = new ArrayList<>();
postAdapter = new PostAdapter(getContext(), postLists);
recyclerViewPosts.setAdapter(postAdapter);
swipeRefreshLayout = view.findViewById(R.id.swiperefresh);
checkFollowing();
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener(){
@Override
public void onRefresh() {
    currentPage++;
    postLists.clear();
    readPosts();
    }
    });
    return view;
    }
private void readPosts() {
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts");
    Query postQuery = reference.limitToLast(currentPage * TOTAL_NUMBER_OF_ITEMS_TO_LOAD);
    postQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    postLists.clear();
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
    Post post = snapshot.getValue(Post.class);
    postLists.add(post);
    }
    postAdapter.notifyDataSetChanged();
    swipeRefreshLayout.setRefreshing(false);
    }
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
    }
    });
    }
}

1 Ответ

0 голосов
/ 26 марта 2020

Я бы порекомендовал вам использовать Paging Library из Android. Это дизайн для него, и у вас есть хороший учебник для него здесь . Это может быть немного работы, но оно того стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...