Android下拉リフレッシュコントロールPulToRefresh実例解析


Androidでは、多くの場合、上下を使ってリフレッシュします。これはよく使われている機能です。Androidのv 4パックにも、元のコントロールを提供してくれました。SwipeRefresh Layout。簡潔なリフレッシュ効果を実現できますが、今日の主役はそれではなく、非常に人気のある第三者のリラリフレッシュコントロールです。Pull TorefshはPullTorefsh ScrrollView、Pull Torefsh ListView、Pull Torefsh GridViewなど多くのコントロールを含みます。xmlファイルに直接コントロールとして導入できます。
いくつかの他のサードパーティライブラリとは違って、PultoRefreshの使用には、依存としてmoduleを引用する必要があります。

その後、私達のprojectの配置センターに入ります。ショートカットキーはctrl+alt+shift+sです。そして、ドロップダウンリフレッシュのmoduleを追加したいです。右上のプラス記号をクリックして、Module dependencyを選択してください。


その後、「OK」をクリックして、しばらく待てばこの種類のライブラリを私達のプロジェクトに追加できます。私達はアップローダーを使って更新できます。
私たちが導入したサードパーティライブラリのディレクトリ構造はこうです。

xmlファイルでコントロールを使用するときは、パッケージ名・クラス名の形で使用したいコントロールを参照するように注意してください。
comple.handmark.pulletorefresh.library.Pultorefsh ListView
パッケージ名は私たちが紹介したライブラリのmoduleのAndroid Manifestで確認できます。カタログの中のjavaフォルダの下のクラスは私たちが使うクラスです。ここではPull Torefresh ListViewを例にとって、他のコントロールの使い方は似ています。とても気持ちが悪いのはコントロールの中の属性はコードのヒントがありません。コードのヒントがありません。コードのヒントがありません。何度も合わせてみましたが、自分は間違っていたと思いました。結果はコードの提示がないからです。
まずいくつかの重要な方法を見に来ました。 

//           
 pullToRefreshListView.getRefreshableView();
 /**
 *        :      
 * PullToRefreshBase.Mode.BOTH //        
 * PullToRefreshBase.Mode.PULL_FROM_START //       
 * PullToRefreshBase.Mode.PULL_FROM_END //       
 *
 */
 pullToRefreshListView.setMode(PullToRefreshBase.Mode.PULL_FROM_END);
 //               
 pullToRefreshListView.setScrollingWhileRefreshingEnabled(true);

私達はgetRefresheblew()を通じて(Pull ToRefresh ListViewを使用すると、この方法を呼び出してListViewの一例に戻ります)、対応するコントロールを獲得します。例えばListView、listItemのクリックイベントやデータを適切に合わせて、これを取得したListViewに対して行うことができます。
もう一つ重要な方法はコントロール設定のリフレッシュ時のモニターです。 
pull ToRefresh ListView.set OnRefsh Listener()
彼は二つのパラメータを持っています。一つは
Pull TorefshBase.OnRefsh Listener
インターフェースに対応する匿名の内部クラス形式。一つは
Pull TorefshBase.OnRefsh Listener 2<T>
インターフェースに対応する匿名の内部クラス形式。この中では、一般的に上下が更新されていますが、同時に利用できる時は第二の形式を選択します。 

pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
 //        
 @Override
 public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {

 }

 //        
 @Override
 public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

 }
 });

もちろん、Pull Torefreshはもう一つの重要な方法があります。 
pull Torefresh ListView.onRefresh Complette()
この方法は更新が完了したことを通知します。動画の更新をキャンセルします。これを追加しないと、いつも更新動画が表示されます。ここではいくつかのデータをシミュレートして、スレッドを使ってプログラムを2 s寝かせてから、新しいデータをランダムにローディングして、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;//            

 @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);
 }

 //           
 lv = pullToRefreshListView.getRefreshableView();
 adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datas);
 lv.setAdapter(adapter);
 /**
 *        :      
 * PullToRefreshBase.Mode.BOTH //        
 * PullToRefreshBase.Mode.PULL_FROM_START //       
 * PullToRefreshBase.Mode.PULL_FROM_END //       
 *
 */
 pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
 //               
 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();
  }

  //           
  datas.add(0,"item-------"+(int)(Math.random()*100+1));
  handler.post(new Runnable() {
  @Override
  public void run() {
  adapter.notifyDataSetChanged();
  //         
  pullToRefreshListView.onRefreshComplete();
  }
  });
  }
 }).start();
 }

 //        
 @Override
 public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

 }
 });

 }
}

効果図はこうです。 

更新が完了したらランダムにアイテムアイテムを追加してくれます。このように更新が完了しました。実際のプロジェクトの中で、私達は更新された傍受イベントの中で私達のネットワーク要求を完成するだけでいいです。 
これら以外にも、自分のコントロールスタイルを定義できます。まずグローバル変数LoadingLayoutProxyオブジェクトを定義します。 
prvate LoadingLayoutProxy llProxy;  //コントロールの更新時のテキストなどのオブジェクトの設定に使用します。
適切な位置で実装し、対応するカスタム値を設定します。 

layoutProxy = (LoadingLayoutProxy) pullToRefreshListView.getLoadingLayoutProxy(true, false);
 //          
 layoutProxy.setPullLabel("  ,     !");
 //              
 layoutProxy.setReleaseLabel("      ,   !");
 //            
 layoutProxy.setRefreshingLabel("     ~");
 //       
 layoutProxy.setLoadingDrawable(getResources().getDrawable(R.drawable.animatorss));

layoutProxy初期化時の2つのパラメータは、それぞれどこに適用されるかを表し、最初のパラメータはリフレッシュヘッダに適用されるかを示し、2番目のパラメータは、末尾に適用されるかを表します。 
リフレッシュ時の音も定義できます。 
オーディオファイルを使うには、まず、resリソースファイルの下にrawフォルダを作成し、オーディオファイルをここに置いてからコードを参照してください。 

SoundPullEventListener<ListView> soundEvend = new SoundPullEventListener<>(this);
 //  Flag        
 soundEvend.addSoundEvent(PullToRefreshBase.State.PULL_TO_REFRESH, R.raw.pull_event);
 //           
 soundEvend.addSoundEvent(PullToRefreshBase.State.RESET, R.raw.reset_sound);
 //        
 soundEvend.addSoundEvent(PullToRefreshBase.State.REFRESHING, R.raw.refreshing_sound);
 //            
 pullToRefreshListView.setOnPullEventListener(soundEvend);

これでリフレッシュする時の音も出ますので、試してみてください。
そうだ、Pull Torefresh ListViewを使う時に発生した問題は、ListItemのクリックイベントの毎回のpositionは-1が必要です。更新する時はListViewの一番上にもう一つの項目が追加されていますので、対応するクリックイベントを設定する時はpositionn-1に注意してください。
これはPulToRefreshのlibraryです。上の手順で導入すればいいです。リンク:http://pan.baidu.com/s/1cqp9JS パスワード:a 12 j
これはPull Torefreshの公式Demoです。特に全部です。興味がある友達はダウンロードして研究してみてください。http://pan.baidu.com/s/1ge8gerh 
もちろん、ここではPulToRefreshを簡単に使うだけで、そのリフレッシュ機能を実現することができます。もっと多くのカスタマイズを検討しています。 
また、この文章の入門文もいいと思います。https://www.jb51.net/article/93183.htmを見てもいいです。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。