從android-pulltorefresh三方庫到SwipeRefreshLayout下拉刷新的簡單運用


 

  在19.1版本之前,Android-PullToRefresh作為最為人知的一個強大的下拉刷新開源三方庫,支持各種常用的控件如ListView、GridView、WebView等。但是后來google為我們提供的android-support-v4包,從19.1版本開始,推出了自己的下拉刷新控件SwipeRefreshLayout,作用在多種應用之中。
  在講這兩種下拉刷新控件之前,我先說下從android studio項目引入外部庫的注意事項(PullToRefresh):


 

一、導入PullToRefresh

 1.將PullToRefresh 從GitHub上下下來,鏈接地址(https://github.com/chrisbanes/Android-PullToRefresh);

  2.工程創建成功,准備導入PullToRefresh庫。點擊file-->new-->import module

3.在打開的對話框中,選擇要導入的library,點擊ok。

 4.修改Module name的名字,以便於以后自己識別

5.然后點擊next-->finish完成

6.完成之后可能會報版本不一致的錯誤,只需要在對應的庫下,找到build.gradle文件,修改成和項目里的版本一致,最后try again,就不報錯誤了。

 

7.在自己的App下按F4,選擇Dependencice標簽,點擊加號,選擇Module dependency,然后再選擇要導入的庫,點擊OK,等待加載即可。

二、好啦!就這樣把PullToRefresh導入項目了,接下來進入實踐操作吧。(以PullToRefreshListView為例) 


 

  1.activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.admin.testapp.MainActivity">

<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/myrefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">

</com.handmark.pulltorefresh.library.PullToRefreshListView>

</
RelativeLayout>


 
2.MainActivity
package com.example.admin.testapp;

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
//聲明
private PullToRefreshListView mPullToRefreshListView;
private ListView listview;
//存放數據的集合
private List<String> mData;
//適配器
private ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initView();
}

private void initView() {
mData=new ArrayList<>();
mPullToRefreshListView = (PullToRefreshListView) findViewById(R.id.myrefresh);
listview = mPullToRefreshListView.getRefreshableView();

//模擬從服務器拿來的數據
mData.add("成都");
mData.add("上海");
mData.add("廣州");
mData.add("杭州");
mData.add("北京");
mData.add("深圳");
mData.add("西安");
mData.add("天津");
mData.add("蘭州");
mData.add("長沙");

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mData);
listview.setAdapter(adapter);
//設置刷新監聽
mPullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mData.add("新添加的城市");
adapter.notifyDataSetChanged();
//刷新完成
mPullToRefreshListView.onRefreshComplete();
}
}, 3000);
}
});

}
}
效果圖:

 

 
 
        
三、SwipeRefreshLayout
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.admin.testapp.MainActivity">

<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/myrefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent">

</ListView>

  </android.support.v4.widget.SwipeRefreshLayout>

</
RelativeLayout>

2.MainActivity
package com.example.admin.testapp;

import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener{
//控件聲明
private SwipeRefreshLayout srf;

private ListView listview;
//填充數據的集合
private List<String> mData;
//適配器
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initView();
}

private void initView() {
srf= (SwipeRefreshLayout) findViewById(R.id.myrefresh);
listview= (ListView) findViewById(R.id.listview);
mData=new ArrayList<>();
//模擬服務器填充數據
mData.add("成都");
mData.add("上海");
mData.add("廣州");
mData.add("杭州");
mData.add("北京");
mData.add("深圳");
mData.add("西安");
mData.add("天津");
mData.add("蘭州");
mData.add("長沙");

adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mData);
listview.setAdapter(adapter);

// 設置刷新時進度動畫變換的顏色,接收參數為可變長度數組。也可以使用setColorSchemeColors()方法。
srf.setColorSchemeResources(android.R.color.holo_blue_light, android.R.color.holo_orange_light, android.R
.color.holo_green_light,android.R.color.holo_red_light);

// 設置刷新時圓形圖標的大小。只可傳遞2個參數,SwipeRefreshLayout.LARGE或SwipeRefreshLayout.DEFAULT。
srf.setSize(SwipeRefreshLayout.DEFAULT);

// 設置刷新時圓形圖標的背景色。也可以使用setProgressBackgroundColorSchemeColor()方法。
srf.setProgressBackgroundColorSchemeResource(android.R.color.background_light);

// 設置刷新時的圓形圖標。scale:是否縮放;start:圓形圖標在刷新前的起始位置;end:圓形圖標的偏移量。
srf.setProgressViewOffset(true, 100, 200);

// 設置會觸發下拉刷新的手勢滑動距離
srf.setDistanceToTriggerSync(100);

// 設置刷新的監聽事件
srf.setOnRefreshListener(this);


}

@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mData.add("新添加的城市");
adapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this,"更新列表成功",Toast.LENGTH_SHORT).show();
srf.setRefreshing(false);
}
},3000);
}
}
 

 

   總結,以上就是這兩個下拉刷新的基本運用,當然想要打造更高級、更炫彩的下拉刷新控件,就得去修改它們的源碼,自定義各種下拉的樣式了。

 

 

 

 

 

 

 

 

 

 

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM