android的分页库的自定义类似物

时间:2019-02-20 05:59:14

标签: android android-recyclerview recycler-adapter

几天来,我一直在尝试创建自己的将数据添加到recyclerView的方法。我知道Google的分页库,但是我没有设法在自定义的recyclerView适配器中使用它,因此我决定创建自己的解决此任务的方法。总的来说,一切都可以达到列表的底部。但是我无法在到达列表顶部时创造出任何真正好的东西。这是我的onBindViewHolder的代码:

 @Override
    public void onBindViewHolder(@NonNull final SenderHolder holder, final int position) {
        final MessageModel message = messageList.get(position);
        holder.checkBox.setVisibility(View.GONE);
        boolean attachment = message.isAttachment();
        int new_one = message.getNewField();

        if (position == getItemCount() - 1 && position != getItemCount() && more50) {
            onBottomReachedListener.onBottomReached(position);
        }

        if(position==getItemCount()-1){
            Log.w("m","mk");
        }

        /*if (position == getItemCount() - 5) {
            onTopReachedListener.onTopReached(position);
            Log.w("m", "=");
        }*/

    }

我为此任务创建了两个界面:

public interface OnBottomReachedListener {
    void onBottomReached(int position);
}

+

public interface OnTopReachedListener {
    void onTopReached(int position);
}

通常它们是相似的,也许我会删除其中之一。但是,我无法创建优秀的顶级受众。当我到达最低点时,我的Retrofit发送一个请求,并为recyclerView获取一些其他数据,但是当我到达列表的顶部时,我无法下载一些数据。我尝试添加一些bool值,该值将使顶部到达的侦听器下载一些数据,但是当我到达列表的底部时,我会向我获取一些数据recyclerView,然后过一会儿,顶部到达的侦听器开始从顶部开始下载数据清单。我知道当我的位置为0时它开始工作,但是我尝试添加一些附加条件。我从该函数调用的两个侦听器均会将数据上传到recyclerView:

public void getMessages(final int type, final String token, final Integer offset) {
APIService mAPIService = MySingleton.getInstance().apiService();
mAPIService.get_list_of_messages("Bearer " + token, type, offset).enqueue(new Callback<MessageArray>() {
@Override
public void onResponse(@NonNull Call<MessageArray> call, @NonNull final Response<MessageArray> response) {
if (response.isSuccessful()) {
count = Objects.requireNonNull(response.body()).getCount();
prev_url = response.body().getPrevious_url();
next_url = response.body().getNext_url();
messageArrayList = (ArrayList<MessageModel>) Objects.requireNonNull(response.body()).getMessages();
adapter = new ListAdapter(messageArrayList, getActivity(), type);
if (next_url != null) {
ListAdapter.setMore50(true);
((ListAdapter) adapter).setOnBottomReachedListener(new OnBottomReachedListener() {
@Override
public void onBottomReached(int position) {
getMessages(type, a_token, Integer.parseInt(Uri.parse(response.body().getNext_url()).getQueryParameter("offset")));
}
});
} else {
ListAdapter.setMore50(false);
}
if (prev_url != null) {
((ListAdapter) adapter).setOnTopReachedListener(new OnTopReachedListener() {
@Override
public void onTopReached(int position) {
getMessages(type, a_token, Integer.parseInt(Uri.parse(response.body().getPrevious_url()).getQueryParameter("offset")));
}
});
}
adapter.notifyDataSetChanged();
recyclerView.setAdapter(adapter);
recyclerView.scrollToPosition(position);
((ListAdapter) adapter).setListener((MainCenter) getActivity());

} else {
ResponseBody errorBody = response.errorBody();
try {
....
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(@NonNull Call<MessageArray> call, @NonNull Throwable t) {
}
});
}

我希望我会得到一些好的建议和有用的帮助。谢谢:)

0 个答案:

没有答案