天天看點

Android 判斷RecyclerView滾動到底部

原創文章,如有轉載,請注明出處:http://blog.csdn.net/myth13141314/article/details/60866752

首先看看RecyclerView的簡單使用

  • 首先是常見的使用步驟
RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.rlv_recycleview);

//布局管理器,這裡是GridView布局,列數為3列
GridLayoutManager layoutManager = new GridLayoutManager(getContext(), );

//或者也可以是LinearLayoutManager
//LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);

//設定布局管理器
recyclerView.setLayoutManager(layoutManager);

//設定擴充卡
recyclerView.setAdapter(mAdapter);

//添加分割線
recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
           
  • 然後是擴充卡的編寫
private class myAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>  {

        private List<String> names = new ArrayList<String>();

        //構造函數
        public myAdapter (List<String> names) {
            this.names = names;
        }

        //view的布局類型
        @Override
        public int getItemViewType(int position) {
            return ;//return your type
        }


        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List<Object> payloads) {
            super.onBindViewHolder(holder, position, payloads);
        }

        //item數量
        @Override
        public int getItemCount() {
          return strings.size();
        }

        @Override
        public long getItemId(int position) { return position; }

        //生成布局和Viewholder
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(getContext()).inflate(R.layout.cell_recycleview, null);
            MyViewHolder myViewHolder = new MyViewHolder(view);
            return  myViewHolder;
        }

        //UI的更新,設定資料,點選監聽等
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

            String name = names.get(position);

            ((MyViewHolder) viewHolder).nameTextView.setText(name);
            ((MyViewHolder) viewHolder).rootView.
            ((MyViewHolder) viewHolder).rootView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       //recrclerView 點選事件
                    }
                });

        }

        //自定義ViewHolder
        public class MyViewHolder extends RecyclerView.ViewHolder {

            public View rootView;
            public TextView nameTextView;


            public MyViewHolder (View view) {
                super(view);
                rootView = view;

                nameTextView = (TextView) view.findViewById(R.id.tv_name);
            }
        }
}
           

判斷滾動到底部,需要為recyclerview添加滾動監聽

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

        //第一個可見item的位置
        int firstVisibleItem =((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstVisibleItemPosition();

        //目前可見的item數
        int visibleItemCount = ((LinearLayoutManager)recyclerView.getLayoutManager()).getChildCount();

        //總共的item數
        int totalItemCount = ((LinearLayoutManager)recyclerView.getLayoutManager()).getItemCount();

        if (firstVisibleItem == ) {//滾動到頂部
            isTop = true;            
        }else {
            isTop = false;       
        }

        // 滿足下列條件後即滾動到底部,如有需要可開始加載下一頁
        if (firstVisibleItem + visibleItemCount > totalItemCount - ) {
            if (current_page>= && total_page>current_page) {//根據實際,再加一些加載更多的條件判斷

                loadMoreData();//加載更多
            }
        }
    }
});