0

Iam trying to implement Endless Infinite Scrolling with RecyclerView, but I am only getting all records and even not getting any progress while trying to scroll at bottom. and see this my code this is my News_Adapter

public class NewsAdapter extends RecyclerView.Adapter {
private final int VIEW_ITEM = 1;
private final int VIEW_PROG = 0;

private List<News> newsList;
private Context context;

// The minimum amount of items to have below your current scroll position
// before loading more.
private int visibleThreshold = 5;
private int lastVisibleItem, totalItemCount;
private boolean loading;
private OnLoadMoreListener onLoadMoreListener;

public NewsAdapter(List<News> newsList , RecyclerView recyclerView){
    this.newsList = newsList;
    this.context = context;

    if(recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
        final  LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();

        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                totalItemCount = linearLayoutManager.getItemCount();
                lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
                if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                    // End has been reached
                    // Do something
                    if (onLoadMoreListener != null) {
                        onLoadMoreListener.onLoadMore();
                    }
                    loading = true;
                }
            }
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

                // When went to the end of the list, load more posts
                if (newState == RecyclerView.SCROLL_STATE_IDLE) {

                    if (linearLayoutManager.findLastVisibleItemPosition() >= linearLayoutManager.getItemCount() - 1) {
                        // Grow List
                    }
                }
            }
        });
    }
}

@Override
public int getItemViewType(int position){
    //return newsList.get(position) instanceof News ? VIEW_ITEM : VIEW_PROG;
    return (position >= newsList.size()) ? VIEW_PROG : VIEW_ITEM;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
    RecyclerView.ViewHolder vh;
    if (viewType == VIEW_ITEM) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_list_row, parent, false);
        vh = new MyViewHolder(v);
    } else {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.progress_item, parent, false);

        vh = new ProgressViewHolder(v);
    }
    return vh;
}

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView title;
    public ImageView image,nextArrowimage;
    public TextView desc;
    private News news;

    public MyViewHolder(View view) {

        super(view);
        ProgressBar progressBar = null;
        title = (TextView) view.findViewById(R.id.News_title);
        image = (ImageView) view.findViewById(R.id.News_imageView);
        nextArrowimage = (ImageView)view.findViewById(R.id.news_NextArrow);
        desc = (TextView) view.findViewById(R.id.News_desc);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String title = news.getTitle();
                String desc = news.getDesc();
                String image = "http://bitstobyte.in/upload/"+news.getImage();

                Intent intent = new Intent(context, News_Activity.class);
                intent.putExtra("title", title);
                intent.putExtra("desc",desc);
                intent.putExtra("imageUrl", image);
                context.startActivity(intent);

                Toast.makeText(v.getContext(), "OnClick :" + news.getTitle() + " \n "+news.getImage(),Toast.LENGTH_SHORT).show();
            }
        });

    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder,int position){
    //if (holder instanceof MyViewHolder) {
   // if (getItemViewType(position)==VIEW_ITEM) {
    if (newsList.get(position)!=null && getItemViewType(position)==VIEW_ITEM ) {
        final News single_news= newsList.get(position);

            ((MyViewHolder) holder).title.setText(single_news.getTitle());

            ((MyViewHolder) holder).desc.setText(single_news.getDesc());

            ((MyViewHolder) holder).nextArrowimage.setImageResource(R.drawable.nextblackbutton);

            context = ((MyViewHolder) holder).image.getContext();

            Picasso.with(context).load("http://bitstobyte.in/upload/"+single_news.getImage()).placeholder(R.drawable.ic_favorite_white_24dp).error(R.drawable.ic_map_24dp).resize(100,100).into(((MyViewHolder) holder).image);

            ((MyViewHolder) holder).news= single_news;

    } else {
        ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
    }
}
public void setLoaded() {
    loading = false;
}
@Override
public int getItemCount() {
    return newsList.size()+1;
}

public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
    this.onLoadMoreListener = onLoadMoreListener;
}

public static class ProgressViewHolder extends RecyclerView.ViewHolder {
    public ProgressBar progressBar;

    public ProgressViewHolder(View v) {
        super(v);
        progressBar = (ProgressBar)v.findViewById(R.id.progressBar1);
    }
}

}

  • May be you forgot to specify generic type of your `ViewHolder`. I mean, you need to specify your parent class. `extends RecyclerView.Adapter` – Pavel Strelchenko Aug 04 '16 at 08:01

2 Answers2

0

You are getting error at below line right ?

  ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);

Can you tell why you have used two ViewHolders ?

FYI :You can't use two ViewHolder means can't extends two ViewHolder.

ViramP
  • 1,381
  • 9
  • 10
  • ok ...i will send my full code..now i changed my code no errors are there but even not getting progressbar at bottom – kranthi kumar Aug 04 '16 at 08:10
  • yestarday i posted my full code see once : http://stackoverflow.com/questions/38743298/recyclerviewpagination-endless-infinite-scrolling-issue – kranthi kumar Aug 04 '16 at 08:11
  • frnds i followed LoadMore RecyclerView with progress bar showing at bottom example : example : http://android-pratap.blogspot.in/2015/06/endless-recyclerview-with-progress-bar.html – kranthi kumar Aug 04 '16 at 08:18
0

Just change this function:

@Override
public int getItemViewType(int position){
    //return newsList.get(position) instanceof News ? VIEW_ITEM : VIEW_PROG;
    return (position >= newsList.size() || newsList.get(position)==null) ? VIEW_PROG : VIEW_ITEM;
}

And

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder,int position){
if (getItemViewType(position)==VIEW_ITEM ) {
    final News single_news= newsList.get(position);

        ((MyViewHolder) holder).title.setText(single_news.getTitle());

        ((MyViewHolder) holder).desc.setText(single_news.getDesc());

        ((MyViewHolder) holder).nextArrowimage.setImageResource(R.drawable.nextblackbutton);

        context = ((MyViewHolder) holder).image.getContext();

        Picasso.with(context).load("http://bitstobyte.in/upload/"+single_news.getImage()).placeholder(R.drawable.ic_favorite_white_24dp).error(R.drawable.ic_map_24dp).resize(100,100).into(((MyViewHolder) holder).image);

        ((MyViewHolder) holder).news= single_news;

} else {
    ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
}
}
anhtuannd
  • 883
  • 9
  • 15
  • i got IndexOutofBoundException.....anyway yestarday i posted my full code ...that code was getting no errors but even not getting progressbar....this is my code : http://stackoverflow.com/questions/38743298/recyclerviewpagination-endless-infinite-scrolling-issue – kranthi kumar Aug 04 '16 at 08:17
  • frnds i followed LoadMore RecyclerView with progress bar showing at bottom example : http://android-pratap.blogspot.in/2015/06/endless-recyclerview-with-progress-bar.html – kranthi kumar Aug 04 '16 at 08:18