相关疑难解决方法(0)

带有ProgressBar的Endless RecyclerView用于分页

我正在使用一个RecyclerView并从API获取对象,批量为十.对于分页,我使用EndlessRecyclerOnScrollListener.

一切正常.现在剩下的就是在列表底部添加一个进度微调器,同时由API提取下一批对象.以下是Google Play商店应用的屏幕截图,其中显示了以下ProgressBar内容RecyclerView:

在此输入图像描述

问题是,在获取下一批对象时,既RecyclerView没有EndlessRecyclerOnScrollListener内置支持也没有显示ProgressBar底部的内置支持.

我已经看到了以下答案:

1. 将不确定的ProgressBar页脚放在RecyclerView网格中.

2. 添加项目到无尽的滚动RecyclerViewProgressBar在底部.

我不满意这些答案(由同一个人).这涉及null 在用户滚动时中途将对象拴入数据集中,然后在下一批次交付后将其取出.它看起来像是一个黑客,可以回避主要问题,可能会或可能不会正常工作.它会在列表中引起一些刺耳和失真

使用SwipeRefreshLayout不是解决方案.SwipeRefreshLayout涉及从顶部拉取以获取最新的项目,并且它无论如何都不显示进度视图.

有人可以为此提供一个很好的解决方案吗?我有兴趣知道Google是如何为自己的应用程序实现此功能的(Gmail应用程序也有此功能).是否有任何文章详细显示?所有的答案和评论将不胜感激.谢谢.

其他一些参考:

1. 分页RecyclerView.(精湛的概述......)

2. RecyclerView页眉和页脚.(更多相同......)

3. 无尽RecyclerViewProgressBar在底部.

android android-listview android-progressbar android-5.0-lollipop android-recyclerview

57
推荐指数
3
解决办法
4万
查看次数

将不确定的进度条作为页脚放入RecyclerView网格中

如何在网格RecycleView中获取"向上滚动以加载更多"的不确定循环指示符?

该模式在那里描述:http://www.google.com/design/spec/components/progress-activity.html#progress-activity-behavior in"两阶段加载"和"示例2:向上滚动以加载更多"示例视频.

我正在尝试使用新的RecyclerView来实现这一点,但是我找不到一种"不太苛刻"的方式来做到这一点,首先是因为没有办法在网格中添加覆盖整行的页脚.有什么建议?

android footer android-recyclerview

55
推荐指数
3
解决办法
4万
查看次数

使用ReverseLayout recyclerview将项目添加到Endless Scroll RecyclerView

在正常的recyclerview中,最新的项目都在顶部,如果您将项目添加到recyclerview中,它会将现有项目向下推,新项目将位于顶部位置.

在reverseLayout recyclerview中,最新的项目都在底部,如果您将项目添加到recyclerview中,则会在底部添加.这种布局对于评论提要非常有用,您希望最新评论位于底部.

例如,当您评论朋友的状态时,Facebook评论供稿就是一个很好的例子.您可以看到评论都有时间在底部发布,时间从上到下从12小时减少到10小时:

facebook评论Feed

reverseLayout很容易设置,我使用这段代码完成了它:

mLayoutManager = new LinearLayoutManager(this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
Run Code Online (Sandbox Code Playgroud)

然而,我正在努力附加一个反向无限滚动监听器.我使用下面的维伦的代码,我的问题了一段时间后(在底部带有进度添加项目到无尽的滚动RecyclerView),然后修改它,使它的onLoadMoreListener只会激活自己当它向下,而不是向上滚动.您想要向上滚动到较旧的评论:

    if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
        final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
        //if you add on addOnScrollListener, it will cause the scroll listener to be called twice each time you reset your adapter
        recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
            int firstVisibleItem;
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                final int currentFirstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();
                totalItemCount = linearLayoutManager.getItemCount();
                lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();

                if(lastVisibleItem > firstVisibleItem)
                {
                    Log.i("SCROLLING …
Run Code Online (Sandbox Code Playgroud)

android onscrolllistener android-recyclerview

14
推荐指数
1
解决办法
6024
查看次数

不定式RecyclerView对我不起作用

我知道之前曾多次询问过这个问题,但我很困惑为什么有时会加载数据,有时候一旦到达列表末尾就没有加载数据.此外,当我去快速滚动通过列表,以及新的数据已经加载,而是立即返回我在列表中的第一项,并从服务器中删除从下一个页面的所有新加载的项目.所以这是第二个问题和第三个问题是,当我使用SwipeRefreshLayout加载的项目,我也没有得到新的项目,当我到达列表的末尾.

我在我的项目中实现了这个:https://gist.github.com/ssinss/e06f12ef66c51252563e

list.setLayoutManager(manager);
    list.setEmptyView(emptyView);
    list.setItemAnimator(new DefaultItemAnimator());
    list.setAdapter(mAdapter);

    loadJokes(1);

    list.addOnScrollListener(new EndlessRecyclerOnScrollListener(manager) {
        @Override
        public void onLoadMore(final int current_page) {
            loadMoreJokes(current_page);
        }
    });
Run Code Online (Sandbox Code Playgroud)

这是我从服务器加载更多项目的方法:

private void loadMoreJokes(int current_page) {
    StringRequest request = new StringRequest(Request.Method.GET, AppConfig.URL_GET_ALL_JOKES + current_page,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    hideDialog();
                    try {
                        JSONObject object = new JSONObject(response);
                        boolean error = object.getBoolean("error");
                        JSONArray jokes = object.getJSONArray("jokes");
                        if (!error) {
                            for (int i = 0; i < jokes.length(); i++) {
                                JSONObject object1 = jokes.getJSONObject(i); …
Run Code Online (Sandbox Code Playgroud)

android

5
推荐指数
1
解决办法
489
查看次数

尝试在空对象引用上调用虚拟方法'boolean android.os.Handler.postDelayed(java.lang.Runnable,long)'

我一直在关注此页面,将内容添加到Endless Scroll RecyclerView中,底部带有ProgressBar,我认为我做对了所有事情,但是由于某种原因,我回到了这一行onLoadMoreListener.onLoadMore();

 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.postDelayed(java.lang.Runnable, long)' on a null object reference
Run Code Online (Sandbox Code Playgroud)

我知道有很多有关空指针错误的文章,但是该行在if语句中,如果为空则不应执行。

if (onLoadMoreListener != null) {
                        onLoadMoreListener.onLoadMore();
                    }
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?我应该发布什么代码来帮助解决问题?

mAdapter.setOnLoadMoreListener(new MyAdapter.OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                //add progress item
                myDataset.add(null);
                mAdapter.notifyItemInserted(myDataset.size() - 1);

                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //remove progress item
                        myDataset.remove(myDataset.size() - 1);
                        mAdapter.notifyItemRemoved(myDataset.size());
                        MyRecyclerItems gridItem= new MyRecyclerItems();
                        gridItem.setAbout("Test");
                        gridItem.setEmail("tesssst@gmail.com");
                        myDataset.add(0,gridItem);
                        mAdapter.notifyItemInserted(myDataset.size());
                        mAdapter.setLoaded();
                    }
                }, 2000);
                System.out.println("load");
            }
        });
Run Code Online (Sandbox Code Playgroud)

android android-studio android-recyclerview

1
推荐指数
1
解决办法
1万
查看次数