【问题标题】:Staggered Gridview (Recycleview) with load more functionality inside the NestedScrollView在 NestedScrollView 中加载更多功能的交错 Gridview (Recycleview)
【发布时间】:2017-01-30 06:30:46
【问题描述】:

我想在我的交错网格视图中实现加载更多功能。我已经尝试了一些代码行,比如使用addOnScrollListener,但是当我到达列表底部时没有调用。
请找到我尝试实现加载更多功能但没有得到预期结果的代码.

MY_STRAGGED_RECYCLIVIEW.addOnScrollListener(new RecyclerView.OnScrollListener() {
                    @Override
                    public void onScrolled(RecyclerView recyclerView,
                                           int dx, int dy) {
                        super.onScrolled(recyclerView, dx, dy);

                        totalItemCount = staggeredGridLayoutManager.getItemCount();
                        lastVisibleItem = staggeredGridLayoutManager
                                .findLastCompletelyVisibleItemPositions(null)[0];

                        if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                            // End has been reached
                            // Do something
                            System.out.println("I amm here dd ");

                            loading = true;
                        }
                    }
                });

在我上面的代码中,System.out 没有得到打印...

我已经为 setOnScrollChangeListener 的散乱网格视图尝试了另一个侦听器,但它也无法正常工作

MY_STRAGGED_RECYCLIVIEW.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                System.out.println("I amm here fffffffffff ");

            }
        });

这个监听器也出现了同样的问题,无法打印我的 System.out

关于我在onBindViewHolder 方法中的adapter 类中尝试的更多内容

if(getCount()==position)
{
////for getting the last item of the recycleview
}

上面的代码也不起作用..请帮我解决这个问题..谢谢:)



@Abbas请检查下面我的适配器代码

public class StraggredView extends RecyclerView.Adapter<StraggredView.ViewHolder> {

    private List<Content> mDataSet;
    private Context ctx;

    public StraggredView(Context context, List<Content> arrList) {
        ctx = context;
        mDataSet = arrList;

    }

    @Override
    public StraggredView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_grid, parent, false);
        return new ViewHolder(view);

    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {


        if(getItemCount()==position)
        {
            //// I AM NOT GETTING IT AT THE BOTTOM... IT INVOKED AS THE ADAPTER IS CALLED FIRST TIME...LOOK AT IT
        }

        if (mDataSet.get(position).getContentImage() == null || mDataSet.get(position).getContentImage().isEmpty()) {

            Glide.with(ctx).load(R.drawable.no_content)
                    // .override(screenWidth / 2, Utils.dpToPx(height))
                    .into(holder.imgContent);
        } else {
            Glide.with(ctx).load(mDataSet.get(position).getContentImage())
                    //  .override(screenWidth / 2, Utils.dpToPx(height))
                    //    .centerCrop()
                    //.transform(new CircleTransform())
                    .into(holder.imgContent);
        }

        holder.imgContent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mDataSet.get(position).getContentImage() != null
                        || !mDataSet.get(position).getContentImage().isEmpty()) {
                    FragmentActivity activity = (FragmentActivity) (ctx);
                    FragmentManager fm = activity.getSupportFragmentManager();
                    FullScreenFragment dialog = FullScreenFragment.newInstance(
                            mDataSet.get(position).getContentImage());
                    dialog.show(fm, "dialog");
                }
            }
        });

    }

    @Override
    public int getItemCount() {
        return this.mDataSet.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        public ImageView imgContent;

        public ViewHolder(View itemView) {
            super(itemView);

            imgContent = (ImageView) itemView.findViewById(R.id.imgContent);

        }


    }

}

【问题讨论】:

  • 你可以使用这个链接:stackoverflow.com/questions/8664935/…
  • @AmitRanjan ..我已经尝试了上面的链接,它也无法在网格视图分散的情况下工作
  • 你能看到这个代码吗:stackoverflow.com/questions/16851934/…
  • 还是不行:(
  • 你为什么不试试getCount()-1 == position。如果我没记错的话,getcount 返回RecyclerView 中的项目总数position 永远不会达到该计数。让我知道它是否有效。我会更新我原来的答案。

标签: android android-recyclerview android-nestedscrollview staggered-gridview


【解决方案1】:

实际上我使用的是NestedScrollView,它是我的Staggered recycleview 的父view。因此addOnScrollListener 监听器和setOnScrollChangeListener 没有在其中工作..
我在NestedScrollView 中使用了setOnScrollChangeListener,效果很好。检查我的以下解决方案:-

NestedScrollView myNestedScroll= (NestedScrollView) findViewById(R.id.myNestedScroll);

myNestedScroll.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
    @Override
    public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

        if (scrollY > oldScrollY) {
            Log.i(TAG, "Scroll DOWN");
        }
        if (scrollY < oldScrollY) {
            Log.i(TAG, "Scroll UP");
        }

        if (scrollY == 0) {
            Log.i(TAG, "TOP SCROLL");
        }

        if (scrollY == (v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight())) {
            Log.i(TAG, "BOTTOM SCROLL");
        }
   }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 2019-06-02
    • 2019-10-22
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多