国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android RecyclerView實現下拉刷新和上拉加載更多

2019-12-12 03:41:04
字體:
來源:轉載
供稿:網友

使用官方的刷新控件SwipeRefreshLayout來實現下拉刷新,當RecyclerView滑到底部實現下拉加載(進度條效果用RecyclerView加載一個布局實現)

需要完成控件的下拉監聽和上拉監聽,其中,下拉監聽通過SwipRefreshLayout的setOnRefreshListener()方法監聽,而上拉刷新,需要通過監聽列表的滾動,當列表滾動到底部時觸發事件,具體代碼如下

主布局

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.SwipeRefreshLayout android:id="@+id/refresh_layout" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView  android:id="@+id/recycler_list"  android:layout_width="match_parent"  android:layout_height="match_parent"/></android.support.v4.widget.SwipeRefreshLayout>
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener { private SwipeRefreshLayout refreshLayout; private RecyclerView recyclerView; private LinearLayoutManager layoutManager; private RecyclerAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  initViews(); } private void initViews() {  refreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh_layout);  recyclerView = (RecyclerView) findViewById(R.id.recycler_list);  layoutManager = new LinearLayoutManager(this);  refreshLayout.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary);//設置刷新時進度條顏色,最多四種  refreshLayout.setOnRefreshListener(this);  mAdapter = new RecyclerAdapter();//自定義的適配器  recyclerView.setAdapter(mAdapter);  recyclerView.setLayoutManager(layoutManager);  recyclerView.addOnScrollListener(new OnRecyclerScrollListener()); } /**  * 用于下拉刷新  */ @Override public void onRefresh() { } /**  * 用于上拉加載更多  */ public class OnRecyclerScrollListener extends RecyclerView.OnScrollListener {  int lastVisibleItem = 0;  @Override  public void onScrollStateChanged(RecyclerView recyclerView, int newState) {   super.onScrollStateChanged(recyclerView, newState);   if (mAdapter != null && newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == mAdapter.getItemCount()) {    //滾動到底部了,可以進行數據加載等操作   }  }  @Override  public void onScrolled(RecyclerView recyclerView, int dx, int dy) {   super.onScrolled(recyclerView, dx, dy);   lastVisibleItem = layoutManager.findLastVisibleItemPosition();  } }}

下面是實現上拉時進度條轉動的效果

item_list_footer.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"> <TextView  android:id="@+id/tv_item_footer_load_more"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_margin="16dp"  android:gravity="center"  android:text="上拉加載更多" /> <ProgressBar  android:id="@+id/pb_item_footer_loading"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_margin="16dp"android:visibility="gone"/></RelativeLayout>

適配器

public class RecyclerAdapter extends RecyclerView.Adapter<ViewHolder> { private static final int TYPE_CONTENT = 0; private static final int TYPE_FOOTER = 1; private ArrayList<DataBean> dataList; private ProgressBar pbLoading; private TextView tvLoadMore; public RecyclerAdapter() {  dataList = new ArrayList<>(); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  if (viewType == TYPE_CONTENT) {   return new ContentViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_content, parent, false));  } else if (viewType == TYPE_FOOTER) {//加載進度條的布局   return new FooterViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_footer, parent, false));  }  return null; } @Override public void onBindViewHolder(ViewHolder holder, int position) {  int type = getItemViewType(position);  if (type == TYPE_CONTENT) {   DataBean bean = dataList.get(position);   ((ContentViewHolder) holder).tvId.setText("" + bean.getId());   ((ContentViewHolder) holder).tvName.setText(bean.getName());  } else if (type == TYPE_FOOTER) {   pbLoading = ((FooterViewHolder) holder).pbLoading;   tvLoadMore = ((FooterViewHolder) holder).tvLoadMore;  } } /**  * 獲取數據集加上一個footer的數量  */ @Override public int getItemCount() {  return dataList.size() + 1; } @Override public int getItemViewType(int position) {  if (position + 1 == getItemCount()) {   return TYPE_FOOTER;  } else {   return TYPE_CONTENT;  } } /**  * 獲取數據集的大小  */ public int getListSize() {  return dataList.size(); } /**  * 內容的ViewHolder  */ public static class ContentViewHolder extends ViewHolder {  private TextView tvId, tvName;  public ContentViewHolder(View itemView) {   super(itemView);   tvId = (TextView) itemView.findViewById(R.id.tv_item_id);   tvName = (TextView) itemView.findViewById(R.id.tv_item_name);  } } /**  * footer的ViewHolder  */ public static class FooterViewHolder extends ViewHolder {  private TextView tvLoadMore;  private ProgressBar pbLoading;  public FooterViewHolder(View itemView) {   super(itemView);   tvLoadMore = (TextView) itemView.findViewById(R.id.tv_item_footer_load_more);   pbLoading = (ProgressBar) itemView.findViewById(R.id.pb_item_footer_loading);  } } /**  * 顯示正在加載的進度條,滑動到底部時,調用該方法,上拉就顯示進度條,隱藏"上拉加載更多"  */ public void showLoading() {  if (pbLoading != null && tvLoadMore != null) {   pbLoading.setVisibility(View.VISIBLE);   tvLoadMore.setVisibility(View.GONE);  } } /**  * 顯示上拉加載的文字,當數據加載完畢,調用該方法,隱藏進度條,顯示“上拉加載更多”  */ public void showLoadMore() {  if (pbLoading != null && tvLoadMore != null) {   pbLoading.setVisibility(View.GONE);   tvLoadMore.setVisibility(View.VISIBLE);  } }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江达县| 临夏县| 弥勒县| 宁都县| 汝阳县| 英吉沙县| 舒城县| 栖霞市| 宾阳县| 双柏县| 察隅县| 吉隆县| 南部县| 临沧市| 遂溪县| 赣榆县| 平潭县| 盘山县| 湘西| 茂名市| 华宁县| 祁门县| 林芝县| 习水县| 鹿泉市| 郎溪县| 桐庐县| 蚌埠市| 鹤壁市| 辰溪县| 河源市| 大竹县| 安图县| 寿阳县| 兰坪| 汾西县| 汾西县| 板桥市| 丰台区| 清徐县| 江山市|