欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android下拉刷新控件PullToRefresh實(shí)例解析

 更新時(shí)間:2016年09月22日 08:51:05   作者:Rabbit丶  
這篇文章主要為大家詳細(xì)解析了Android下拉刷新控件PullToRefresh實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

  Android中很多時(shí)候都會用到上下拉刷新,這是一個(gè)很常用的功能,Android的v4包中也為我們提供了一種原生的下拉刷新控件--SwipeRefreshLayout,可以用它實(shí)現(xiàn)一個(gè)簡潔的刷新效果,但今天我們的主角并不是它,而是一個(gè)很火的第三方的上下拉刷新控件--PullToRefresh。PullToRefresh包括PullToRefreshScrollView、PullToRefreshListView、PullToRefreshGridView等等很多為我們提供的控件,我們可以在xml文件中直接引入作為控件使用。

與一些其他的第三方庫不同,PullToRefresh的使用需要我們引用一個(gè)module作為依賴:

之后進(jìn)入我們的project的配置中心,快捷鍵是ctrl+alt+shift+s,然后選中你想要添加上下拉刷新的module,點(diǎn)擊右上角的加號,選擇Module dependency

然后一路點(diǎn)擊"OK",等待一會就可以將這個(gè)類庫附加到我們項(xiàng)目中了,我們就可以使用上下拉刷新了。

我們引入的第三方庫的目錄結(jié)構(gòu)是這樣的:

在xml文件中使用該控件的時(shí)候,注意要使用包名.類名的形式來引用你想要使用的控件,像這樣:

com.handmark.pulltorefresh.library.PullToRefreshListView

包名可以在我們引入的庫的module的AndroidManifest中查看,在目錄中的java文件夾下的類就是我們要使用的類。這里我們以PullToRefreshListView為例,其他的控件的使用方法類似。非常惡心的是控件里面的屬性沒有代碼提示...沒有代碼提示...沒有代碼提示!害的我對照了好幾遍,以為自己倒錯(cuò)了module,結(jié)果是因?yàn)闆]有代碼提示。
我們先來看幾個(gè)比較重要的方法: 

//獲取帶有刷新的對應(yīng)控件
 pullToRefreshListView.getRefreshableView();
 /**
 * 設(shè)置刷新的模式:常用的有三種
 * PullToRefreshBase.Mode.BOTH //上下拉刷新都可以
 * PullToRefreshBase.Mode.PULL_FROM_START //只允許下拉刷新
 * PullToRefreshBase.Mode.PULL_FROM_END //只允許上拉刷新
 *
 */
 pullToRefreshListView.setMode(PullToRefreshBase.Mode.PULL_FROM_END);
 //設(shè)置是否允許刷新的時(shí)候可以滑動(dòng)
 pullToRefreshListView.setScrollingWhileRefreshingEnabled(true);

當(dāng)我們通過getRefreshableView()獲得對應(yīng)的帶有刷新的控件(如使用PullToRefreshListView的時(shí)候,調(diào)用此方法會返回一個(gè)ListView實(shí)例)的時(shí)候會得到一個(gè)對應(yīng)的控件,比如說ListView,則listItem的點(diǎn)擊事件或者是數(shù)據(jù)適配我們就可以對這個(gè)獲取到的ListView進(jìn)行。

還有一個(gè)比較重要的方法就是為控件設(shè)置刷新時(shí)的監(jiān)聽: 
pullToRefreshListView.setOnRefreshListener()

他有兩個(gè)參數(shù)可以傳,一個(gè)是
PullToRefreshBase.OnRefreshListener<T>

接口對應(yīng)的匿名內(nèi)部類形式。一個(gè)是
PullToRefreshBase.OnRefreshListener2<T>

接口對應(yīng)的匿名內(nèi)部類形式。其中一般上下拉刷新同時(shí)可用的時(shí)候我們選擇第二個(gè)形式: 

pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
 //完成下拉刷新操作
 @Override
 public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {

 }

 //完成上拉刷新操作
 @Override
 public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

 }
 });

當(dāng)然,PullToRefresh還有一個(gè)重要方法就是 
pullToRefreshListView.onRefreshComplete();

此方法用來通知刷新完成了,取消刷新動(dòng)畫,如果不加這一句,會一直顯示一個(gè)刷新動(dòng)畫。這里我們模擬一些數(shù)據(jù),并且在下拉刷新的時(shí)候使用線程讓程序睡2s,然后再隨機(jī)加載一條新數(shù)據(jù)并通知Adapter更新UI,完成代碼如下: 

package ggcomic.rabbit.lx.pulltorefresh;

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

import com.handmark.pulltorefresh.library.LoadingLayoutProxy;
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 pullToRefreshListView;
 private ListView lv;
 private List<String> datas;
 private ArrayAdapter<String> adapter;
 private Handler handler=new Handler();
 private LoadingLayoutProxy llProxy;//設(shè)置刷新時(shí)的文本等的對象

 @Override

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

 pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.pull);

 datas=new ArrayList<>();
 for(int i=1;i<=50;i++){
 datas.add("item---------"+i);
 }

 //獲取帶有刷新的對應(yīng)控件
 lv = pullToRefreshListView.getRefreshableView();
 adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datas);
 lv.setAdapter(adapter);
 /**
 * 設(shè)置刷新的模式:常用的有三種
 * PullToRefreshBase.Mode.BOTH //上下拉刷新都可以
 * PullToRefreshBase.Mode.PULL_FROM_START //只允許下拉刷新
 * PullToRefreshBase.Mode.PULL_FROM_END //只允許上拉刷新
 *
 */
 pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
 //設(shè)置是否允許刷新的時(shí)候可以滑動(dòng)
 pullToRefreshListView.setScrollingWhileRefreshingEnabled(true);

 pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
 //完成下拉刷新操作
 @Override
 public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
 new Thread(new Runnable() {
  @Override
  public void run() {
  try {
  //休眠2s
  Thread.sleep(2000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }

  //向集合中添加一個(gè)隨機(jī)數(shù)
  datas.add(0,"item-------"+(int)(Math.random()*100+1));
  handler.post(new Runnable() {
  @Override
  public void run() {
  adapter.notifyDataSetChanged();
  //控件刷新最新的數(shù)據(jù)
  pullToRefreshListView.onRefreshComplete();
  }
  });
  }
 }).start();
 }

 //完成上拉刷新操作
 @Override
 public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

 }
 });

 }
}

效果圖是這樣的: 

可以看到,刷新完成之后隨機(jī)為我們添加了一個(gè)條目item--39。這樣刷新就完成了,實(shí)際的項(xiàng)目中我們只需要在刷新的監(jiān)聽事件中完成我們的網(wǎng)絡(luò)請求即可。 

除了這些,我們還可以定義自己的刷新控件樣式,如下我們首先定義一個(gè)全局變量LoadingLayoutProxy對象: 
private LoadingLayoutProxy llProxy;  //用于設(shè)置刷新控件刷新時(shí)的文本等的對象

在適當(dāng)?shù)奈恢脤?shí)例化,并且設(shè)置相應(yīng)的自定義的值: 

layoutProxy = (LoadingLayoutProxy) pullToRefreshListView.getLoadingLayoutProxy(true, false);
 //下拉的時(shí)候顯示的文本
 layoutProxy.setPullLabel("很好,繼續(xù)向下拖!");
 //可以放開刷新的時(shí)候顯示的文本
 layoutProxy.setReleaseLabel("放開那只蘿莉,讓我來!");
 //執(zhí)行刷新的時(shí)候顯示的文本
 layoutProxy.setRefreshingLabel("正在刷新喵~");
 //設(shè)置加載的圖片
 layoutProxy.setLoadingDrawable(getResources().getDrawable(R.drawable.animatorss));

layoutProxy初始化時(shí)候的兩個(gè)參數(shù),分別表示應(yīng)用于哪里,第一個(gè)參數(shù)表示是否應(yīng)用于刷新頭部,第二個(gè)參數(shù)表示是否應(yīng)用于尾部。 

我們還可以定義刷新時(shí)候的聲音: 

要使用音頻文件的話需要先在res資源文件下新建一個(gè)raw文件夾,把音頻文件放在這里,然后再代碼中引用: 

SoundPullEventListener<ListView> soundEvend = new SoundPullEventListener<>(this);
 //根據(jù)Flag設(shè)置拉出時(shí)的聲音
 soundEvend.addSoundEvent(PullToRefreshBase.State.PULL_TO_REFRESH, R.raw.pull_event);
 //拉出的控件回退時(shí)的聲音
 soundEvend.addSoundEvent(PullToRefreshBase.State.RESET, R.raw.reset_sound);
 //正在刷新時(shí)的聲音
 soundEvend.addSoundEvent(PullToRefreshBase.State.REFRESHING, R.raw.refreshing_sound);
 //為刷新控件綁定我們的設(shè)置
 pullToRefreshListView.setOnPullEventListener(soundEvend);

這樣刷新時(shí)的聲音也有了,快去試試吧~

對了,在使用PullToRefreshListView的時(shí)候遇到過一個(gè)問題,就是ListItem的點(diǎn)擊事件每次的position都是需要-1才與當(dāng)前item相對應(yīng),因?yàn)橄吕⑿碌臅r(shí)候相當(dāng)于在ListView的最上方又添加了一個(gè)條目,所以設(shè)置其對應(yīng)的點(diǎn)擊事件的時(shí)候要注意position-1。

這個(gè)是PullToRefresh的library,按照上面說的步驟導(dǎo)入就可以使用了:鏈接:http://pan.baidu.com/s/1cqp9JS 密碼:a12j
這個(gè)是PullToRefresh的官方Demo,特別全,感興趣的朋友可以下載下來研究一下:http://pan.baidu.com/s/1ge8gerh 

當(dāng)然,這里我們只是簡單的使用PullToRefresh,只是可以實(shí)現(xiàn)其刷新功能,更多的定制還需要在研究了~ 

另外,我覺得這篇寫的入門文章也可以,可以看看http://www.dbjr.com.cn/article/93183.htm

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論