0

I've a recycler view in which 30 items are loaded for first time and when it reaches 30th item it shows a progress bar and load next 10 item from the server.Everything is working fine.but when the recycler view reaches the 30th item,it is scrolling to top and progressbar is showing at the top of the screen.i want to stop scrolling the recycler view at the 29th position. My program is given below.


public class Life extends Fragment implements URL, Constants,NetworkOperation {


    private RecyclerView mRecyclerView;
    private List<User> mUsers = new ArrayList<>();
    private List<User> temp = new ArrayList<>();
    private UserAdapter mUserAdapter;

    FetchData fetchData;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(getActivity()));
    }


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


        mUsers = new ArrayList<User>();

        //load first item
        loadData();

        mRecyclerView = (RecyclerView) view.findViewById(R.id.business_rv);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        mUserAdapter = new UserAdapter();
        mRecyclerView.setAdapter(mUserAdapter);
        mUserAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                Log.e("haint", "Load More");
                mUsers.add(null);
                mUserAdapter.notifyItemInserted(mUsers.size() - 1);

                //Load more data for reyclerview
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Log.e("haint", "Load More 2");

                        //Remove loading item
                        mUsers.remove(mUsers.size()-1);
                        mUserAdapter.notifyItemRemoved(mUsers.size());
//                        mUserAdapter.notifyDataSetChanged();
                        int index = mUsers.size();
                        loadmoredata(index);

                    }
                }, 1000);
            }
        });

        return view;
    }

    private void loadmoredata(int skip) {

        String url = DETAIL_BASE_URL+"pcat/13?take=10&skip="+skip+"&api_key="+KEY;
        fetchData = new FetchData(this, getActivity(), url);
        fetchData.fromServer();
    }

    private void loadData() {

        String url = LIFESTYLE;
        fetchData = new FetchData(this, getActivity(), url);
        fetchData.fromServer();
    }

    @Override
    public void started() {

    }

    @Override
    public void doingBackground() {

    }

    @Override
    public void completed(JSONObject jsonObject) {


        try {
            JSONArray section = jsonObject.getJSONArray("sections");
            temp = new ArrayList<User>();
            for (int i = 0; i < section.length(); i++) {
                JSONObject subitem = section.getJSONObject(i);
                String name = subitem.getString(HOME_NAME);
                String cat_id = subitem.getString(CAT_ID);
                String style = subitem.getString(STYLE);
                String seeMore = subitem.getString(HOME_SEEMORE);
                String lm = "";

                JSONArray News = subitem.getJSONArray(HOME_NEWS);
                for (int j = 0; j < News.length(); j++) {

                    JSONObject newsObject = News.getJSONObject(j);
                    String ID = newsObject.getString(HOME_ID);
                    String post_title = newsObject.getString(HOME_POST_TITLE);
                    String post_date = newsObject.getString(HOME_POST_DATE);
                    String post_time = newsObject.getString(HOME_POST_TIME);
                    String is_video = newsObject.getString(ISVIDEO);
                    String medium = newsObject.getString(HOME_MEDIUM);
                    String large = newsObject.getString(HOME_LARGE);

                    User user = new User();
                    user.setName(name);
                    user.setCat_id(cat_id);
                    user.setStyle(style);
                    user.setSeeMore(seeMore);
                    user.setLm(lm);

                    user.setID(ID);
                    user.setPost_title(post_title);
                    user.setPost_date(post_date);
                    user.setPost_time(post_time);
                    user.setIs_video(is_video);
                    user.setMedium(medium);
                    user.setLarge(large);

                    temp.add(user);
                }

            }

            mUsers.addAll(temp);


            mUserAdapter.notifyDataSetChanged();
            mUserAdapter.setLoaded();


        } catch (JSONException | OutOfMemoryError e) {
            e.printStackTrace();
        }
    }


    static class UserViewHolder extends RecyclerView.ViewHolder {
        public TextView heading,time;
        public NetworkImageView image;
        public TextView  date;

        public UserViewHolder(View itemView) {
            super(itemView);
            heading = (TextView) itemView.findViewById(R.id.title);
            image = (NetworkImageView) itemView.findViewById(R.id.image);
            date = (TextView) itemView.findViewById(R.id.time);
        }
    }







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

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






    class UserAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

        private final int VIEW_TYPE_ITEM = 0;
        private final int VIEW_TYPE_LOADING = 1;

        private OnLoadMoreListener mOnLoadMoreListener;

        private boolean isLoading;
        private int visibleThreshold =2;
        private int lastVisibleItem , totalItemCount;

        private RequestQueue mRequestQueue;
        private ImageLoader mImageLoader;


        public UserAdapter() {

            if (mRequestQueue == null) {
                mRequestQueue = Volley.newRequestQueue(MyApplication.getAppContext());
                boolean b = Runtime.getRuntime().freeMemory() < 1 * 1024 * 1024;
                Log.i("Riyas", "BusinessAdapter: executing new item " + b);

            }
            mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {
                private final LruCache<String, Bitmap> mCache = new LruCache<String, Bitmap>(100);

                public void putBitmap(String url, Bitmap bitmap) {
                    mCache.put(url, bitmap);
                }

                public Bitmap getBitmap(String url) {
                    return mCache.get(url);
                }
            });

            final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
            mRecyclerView.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();

                    Log.d("visible item=",String.valueOf(visibleThreshold));
                    Log.d("total item=",String.valueOf(totalItemCount));
                    Log.d("last visible item=",String.valueOf(lastVisibleItem));

                    if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                        if (mOnLoadMoreListener != null) {
                            mOnLoadMoreListener.onLoadMore();

                            int comb=lastVisibleItem+visibleThreshold;
                            Log.d("last visible item=",String.valueOf(comb));
                        }
                        isLoading = true;
                    }
                }
            });
        }

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

        @Override
        public int getItemViewType(int position) {
            return mUsers.get(position) == null ? VIEW_TYPE_LOADING : VIEW_TYPE_ITEM;

        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if (viewType == VIEW_TYPE_ITEM) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_row_first, parent, false);
                return new UserViewHolder(view);
            } else if (viewType == VIEW_TYPE_LOADING) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_loading_item, parent, false);
                return new LoadingViewHolder(view);
            }
            return null;
        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            if (holder instanceof UserViewHolder) {

                String font_path = "fonts/EggsReporterRg.otf";
                Typeface Malayalam_font_normal = Typeface.createFromAsset(getActivity().getAssets(), font_path);

                User user = mUsers.get(position);
                UserViewHolder userViewHolder = (UserViewHolder) holder;

                userViewHolder.heading.setTypeface(Malayalam_font_normal);
//                userViewHolder.date.setTypeface(Malayalam_font_normal);

                userViewHolder.heading.setText(user.getPost_title());
                userViewHolder.date.setText(user.getPost_date());
                userViewHolder.image.setImageUrl(user.getLarge(),mImageLoader);

                final String ids = user.getID();
                final String catid = user.getCat_id();

                userViewHolder.heading.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(getActivity(), DetailedNews.class);
                        intent.putExtra("id", ids);
                        intent.putExtra("cat", catid);
                        v.getContext().startActivity(intent);
                    }
                });

                userViewHolder.date.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(getActivity(), DetailedNews.class);
                        intent.putExtra("id", ids);
                        intent.putExtra("cat", catid);
                        v.getContext().startActivity(intent);
                    }
                });

                userViewHolder.image.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(getActivity(), DetailedNews.class);
                        intent.putExtra("id", ids);
                        intent.putExtra("cat", catid);
                        v.getContext().startActivity(intent);
                    }
                });


            } else if (holder instanceof LoadingViewHolder) {
                LoadingViewHolder loadingViewHolder = (LoadingViewHolder) holder;
                loadingViewHolder.progressBar.setIndeterminate(true);
            }
        }

        @Override
        public int getItemCount() {
            return mUsers == null ? 0 : mUsers.size();
        }

        public void setLoaded() {
            isLoading = false;
        }
    }
}
Muhammed Riyas A V
  • 71
  • 1
  • 1
  • 10

0 Answers0