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

首頁 > 系統 > Android > 正文

SwipeRefreshLayout+RecyclerView實現上拉刷新和下拉刷新功能

2019-10-21 21:27:10
字體:
來源:轉載
供稿:網友

SwipeRefreshLayout 是谷歌公司推出的用于下拉刷新的控件,SwipeRefreshLayout已經被放到了sdk中,在Version 19.1之后SwipeRefreshLayout 被放到support v4中。

源碼在SDK/sdk/extras/android/support/v4/src/java/android/support/v4/widget/SwipeRefreshLayout.java

谷歌公司只提供了下拉刷新的功能,RecyclerView的出現基本就是為了替代ListView,GridView的。

今天說一下最常見的下拉刷新  和 上拉刷新的功能。

布局文件:

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/swipe_refresh_widget" android:layout_width="match_parent" android:layout_height="match_parent" >  <android.support.v7.widget.RecyclerView  android:id="@android:id/list"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:cacheColorHint="@null"  android:scrollbars="vertical" /> </android.support.v4.widget.SwipeRefreshLayout>

在Activity中引用這個布局并初始化

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);  mSwipeRefreshWidget = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_widget); mRecyclerView = (RecyclerView) findViewById(android.R.id.list);  mSwipeRefreshWidget.setColorScheme(R.color.color1, R.color.color2, R.color.color3, R.color.color4); mSwipeRefreshWidget.setOnRefreshListener(this);  // 這句話是為了,第一次進入頁面的時候顯示加載進度條 mSwipeRefreshWidget.setProgressViewOffset(false, 0, (int) TypedValue .applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources()  .getDisplayMetrics()));  mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {  @Override public void onScrollStateChanged(RecyclerView recyclerView,  int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE  && lastVisibleItem + 1 == adapter.getItemCount()) {  mSwipeRefreshWidget.setRefreshing(true);  // 此處在現實項目中,請換成網絡請求數據代碼,sendRequest .....  handler.sendEmptyMessageDelayed(0, 3000); } }  @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); lastVisibleItem = mLayoutManager.findLastVisibleItemPosition(); }  });  mRecyclerView.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setItemAnimator(new DefaultItemAnimator());  adapter = new SampleAdapter(); mRecyclerView.setAdapter(adapter);  // 此處在現實項目中,請換成網絡請求數據代碼,sendRequest ..... handler.sendEmptyMessageDelayed(0, 3000); }

SwipeRefreshLayout里面需要注意的Api:

1、setOnRefreshListener(OnRefreshListener listener)  設置下拉監聽,當用戶下拉的時候會去執行回調
2、setColorSchemeColors(int... colors) 設置 進度條的顏色變化,最多可以設置4種顏色
3、setProgressViewOffset(boolean scale, int start, int end) 調整進度條距離屏幕頂部的距離
4、setRefreshing(boolean refreshing) 設置SwipeRefreshLayout當前是否處于刷新狀態,一般是在請求數據的時候設置為true,在數據被加載到View中后,設置為false。

RecyclerView的實現:

第一種,下拉刷新和上拉刷新都用SwipeRefreshLayout 自帶的進度條

mRecyclerView = (RecyclerView) findViewById(android.R.id.list);mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {  @Override public void onScrollStateChanged(RecyclerView recyclerView,  int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE  && lastVisibleItem + 1 == adapter.getItemCount()) {  mSwipeRefreshWidget.setRefreshing(true);  // 此處在現實項目中,請換成網絡請求數據代碼,sendRequest .....  handler.sendEmptyMessageDelayed(0, 3000); } }  @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); lastVisibleItem = mLayoutManager.findLastVisibleItemPosition(); } });  mRecyclerView.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setItemAnimator(new DefaultItemAnimator());  adapter = new SampleAdapter(); mRecyclerView.setAdapter(adapter);

第二種實現下拉刷新用SwipeRefreshLayout 自帶的進度條, 上拉刷新用類似ListView的刷新 提示“加載中”等信息。

我們可以給RecyclerView 也添加一個類似FooterView的item。
我們在Adapter中實現:

public class SampleAdapter extends RecyclerView.Adapter<ViewHolder> { private List<Integer> list;  private static final int TYPE_ITEM = 0; private static final int TYPE_FOOTER = 1;  public List<Integer> getList() { return list; }  public SampleAdapter() { list = new ArrayList<Integer>(); }  // RecyclerView的count設置為數據總條數+ 1(footerView) @Override public int getItemCount() { return list.size() + 1; }  @Override public int getItemViewType(int position) { // 最后一個item設置為footerView if (position + 1 == getItemCount()) { return TYPE_FOOTER; } else { return TYPE_ITEM; } }  @Override public void onBindViewHolder(ViewHolder holder, final int position) { if (holder instanceof ItemViewHolder) { ((ItemViewHolder) holder).textView.setText(String.valueOf(list  .get(position))); } }  @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_ITEM) { View view = LayoutInflater.from(parent.getContext()).inflate(  R.layout.list_item_text, null); view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,  LayoutParams.WRAP_CONTENT)); return new ItemViewHolder(view); } // type == TYPE_FOOTER 返回footerView else if (viewType == TYPE_FOOTER) { View view = LayoutInflater.from(parent.getContext()).inflate(  R.layout.footerview, null); view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,  LayoutParams.WRAP_CONTENT)); return new FooterViewHolder(view); }  return null; }  class FooterViewHolder extends ViewHolder {  public FooterViewHolder(View view) { super(view); }  }  class ItemViewHolder extends ViewHolder { TextView textView;  public ItemViewHolder(View view) { super(view); textView = (TextView) view.findViewById(R.id.text); } }}

這樣我們就可以針對footerview的布局做一些處理了,比如提示“加載中,”,“已經全部加載”等信息。更加靈活一點。

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 运城市| 安岳县| 普宁市| 万州区| 东海县| 溧水县| 裕民县| 洛浦县| 庄河市| 昔阳县| 平邑县| 罗甸县| 屏东市| 毕节市| 织金县| 五莲县| 宁都县| 兴城市| 五台县| 绿春县| 鹤峰县| 西平县| 鄂托克前旗| 仙居县| 屏东市| 视频| 庆阳市| 铜陵市| 黄浦区| 从江县| 南木林县| 秦安县| 河北区| 垣曲县| 榕江县| 通榆县| 志丹县| 安远县| 武隆县| 平安县| 琼结县|