Androidの万能アップドロップダウン・リフレッシュ・フレームワークを構築する--XRefreshView(一)


一、冒頭に書いてある言葉
これを書くのはプロジェクトで役に立つからです.stickylistheadersにリフレッシュを加える必要があります.実はframelayoutの中にlistviewのカスタムviewレイアウトがありますが、いくつかの有名なリフレッシュフレームワークは私が試してもサポートしていません.pulltoRefreshとXListViewは自分でリフレッシュ可能なviewを実現しました.それからこのリフレッシュ可能なviewを直接使用しましょう.これにより、ドロップダウン・リフレッシュが可能になります.私のこの需要は私が彼にいつリフレッシュする必要があるかを教えてくれたフレームワークです.つまり、どんなviewでも、フレームワークがいつリフレッシュする必要があるかを教えてくれれば、フレームワークはいつリフレッシュすることができます.この角度から言えば、このフレームワークは万能で、すべてのviewに適用されます.彼は私が次に紹介する--XRefreshViewです.
二、効果図
gifで見る効果はあまりよくないかもしれませんが、本物の上では、流暢です.
三、簡単な使い方
XRefreshView現段階ではListView,GridView,WebViewがデフォルトでサポートされており、もちろんscrollview,textviewもサポートされているが、現在は追加されておらず、追加も簡単である.
リフレッシュしたいviewについては、リフレッシュしたいviewの外にXRefreshViewをセットするだけでいいです.
<com.andview.refreshview.XRefreshView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:xrefreshview="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/custom_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:orientation="vertical"
    xrefreshview:isHeightMatchParent="true"
    xrefreshview:isWidthMatchParent="true" >

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <!-- xmlns:xrefreshview="http://schemas.android.com/apk/res/com.andview.refreshview" -->

</com.andview.refreshview.XRefreshView>
xrefreshviewラベルは私がカスタマイズしたいくつかの属性です.
 <declare-styleable name="XRefreshView">
        <attr name="isHeightMatchParent" format="boolean" />
        <attr name="isWidthMatchParent" format="boolean" />
        <attr name="autoRefresh" format="boolean" />
    </declare-styleable>
    <declare-styleable name="StickyListHeadersListView">
isHeightMatchParentとisWidthMatchParentは、幅が広くparentに満ちているかどうかを表しますが、なぜこの2つのプロパティが必要なのでしょうか.
ええ、そうです.stickylistheadersのドロップダウンリフレッシュをしていると、フレームやカートンがなくなることに気づきました.その後、問題を解決する過程で、私は主な時間がonMeasureの過程で発生していることを発見しました.つまり、システムはviewのサイズを測定するときに時間を消費しすぎてカートンを招きます.問題がどこにあるか知ったら、次は彼を解決しなければならない.明らかに2つの案がある:1、stickylistheadersを書き換え、測定時に効率を高める.2、自分の原因を探す.1つ目の案の代価は少し大きいので、私は自分の原因を探しています.その後、ネットでこのような文章を見ました.Android View.onMeasureメソッドの理解
widthまたはheightをfillに設定するとparentの場合、コンテナがレイアウト時にサブviewを呼び出すmeasureメソッドが入るモードはEXACTLYであり、サブviewが残りのコンテナの空間を占めるため、その大きさは決定され、wrap_に設定されるとcontentの時、容器が入ってきたのはAT_MOSTは、サブviewの大きさが一番多いことを示します.そして私のレイアウトを見て
<com.andview.refreshview.XRefreshView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:xrefreshview="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/custom_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    xrefreshview:autoRefresh="true" >

    <com.example.xrefreshviewdemo.stickyListHeaders.StickyListHeadersListView
        android:id="@+id/sticky_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

</com.andview.refreshview.XRefreshView>
heightはwrap_に設定されていますcontentの、matchに変えたらparent以降問題は解決した.私は考えています.システムが測定している間に、システムに正確なサイズを教えてくれたからかもしれません.システムはとても喜んで、喜ぶと効率が高くなります.
複雑なviewを使っていて、リフレッシュでカートンがある場合は、幅をmatch_に設定してみてください.parent、XRefreshViewは自動的にこのことをしてくれました.デフォルトのisHeightMatch ParentとisWidthMatch Parentはtrueです.しかし、独自のニーズがあれば、レイアウトでfalseに設定することができます.
AutoRefreshとは、ページに入ったばかりのときにviewが自動的にリフレッシュされるかどうかを意味します.
3.1 XRefreshViewデフォルトでサポートされているview
次に、XRefreshViewのデフォルトでサポートされているviewではjavaコードでこのようにする必要があります.
//           
		refreshView.setPullLoadEnable(true);
リノベーションが可能かどうかを設定します.デフォルトではできません.
//     view   
		refreshView.setRefreshViewType(XRefreshViewType.ABSLISTVIEW);
ビューをリフレッシュするタイプを設定し、まずXRefreshViewTypeというクラスを見てみましょう.
/**
 *          view
 * @author [email protected]
 *
 */
public enum XRefreshViewType {
	NOSCROLLVIEW, ABSLISTVIEW, SCROLLVIEW, WEBVIEW,NONE
}
は、スクロール不可能なview、abslistview、scrollview、webview、その他です.
使用するときは、XRefreshViewのデフォルトでサポートされているviewのみがviewのタイプを設定する必要がありますが、カスタムviewであれば設定する必要はありません.
//          
		refreshView.setAutoRefresh(true);
自動リフレッシュの有無を設定します.デフォルトはfalseです.ここでもxmlで設定できますが、優先度はjavaコードのほうが高いです.つまりxmlでfalseに設定しますが、javaコードでtrueに設定すると、自動的に更新されます.
public static long lastRefreshTime;
//         
		refreshView.restoreLastRefreshTime(lastRefreshTime);
前回リフレッシュの時間を設定します.ここではまず静的long型の定数を定義しました.静的なのはプログラムが彼の値をずっと維持できるようにするためです.これは私がサボっている書き方です.もしあなたが本当にリフレッシュしたヘッダーにどのくらい前にリフレッシュする必要があるなら、この値をローカルに保存することができます.LastRefreshTimeは、XRefreshViewが供給用永続化ストレージに返すもので、具体的にはコードには次のようになっています.
refreshView.setXRefreshViewListener(new XRefreshViewListener() {

			@Override
			public void onRefresh() {

				new Handler().postDelayed(new Runnable() {
					@Override
					public void run() {
						refreshView.stopRefresh();
						lastRefreshTime = refreshView.getLastRefreshTime();
					}
				}, 2000);
			}

			@Override
			public void onLoadMore() {
				new Handler().postDelayed(new Runnable() {

					@Override
					public void run() {
						refreshView.stopLoadMore();
					}
				}, 2000);
			}
		});
ここでは、リフレッシュイベントをリスニングするには、まずリスニングを登録する必要があります.方法はrefreshViewです.setXRefreshViewListener、パラメータはリフレッシュされたリスニングインタフェースXRefreshViewListenerで、onRefreshはドロップダウン・リフレッシュ時にコールバックし、onLoadMoreはアップ・リフレッシュ時にコールバックします.データのリフレッシュが完了すると、XRefreshとstopLoadMoreはそれぞれドロップダウン・リフレッシュを停止し、アップ・リフレッシュのUIを停止するために必要です.前にlastRefreshTimeといえば、リフレッシュを停止したときにgetLastRefreshTimeという方法で今回のリフレッシュ時間を渡すことで、次回の使用のためにローカライズされたストレージを作ることができます.
3.2カスタムview
カスタムビューをリフレッシュする場合は、XRefreshViewもサポートされています.
refreshView.setRefreshBase(new XRefreshContentViewBase() {

			@Override
			public boolean isTop() {
				return stickyLv.getFirstVisiblePosition() == 0;
			}

			@Override
			public boolean isBottom() {
				return stickyLv.getLastVisiblePosition() == mTotalItemCount - 1;
			}
		});
カスタムviewは、XRefreshViewがいつカスタムviewが上部に到着し、いつ下部に到着したかを示すリフレッシュルールを自分で実装する必要があります.どうですか.便利ではないでしょうか.XRefreshViewはカスタマイズビューを更新するタイミングを提供するだけで、他のすべては安心してXRefreshViewに任せましょう.彼はあなたのためにすべてを解決します.
次に、XRefreshViewはリフレッシュしたヘッダーとfooterを捨てて、アプリケーションで自分のヘッダーとfooterを定義することができます.
四、
まず使い方を紹介し、次の文章ではXRefreshViewがどのように実現されているかを紹介します.
XRefreshViewに興味がある場合はgithubでXRefreshViewに注目してください
もちろんこれをクリックして直接ダウンロードすることもできます
もしあなたが良いアドバイスがあれば、私に連絡することを歓迎して、githubで直接私に押して、あるいは私のメールボックスに連絡することができます:[email protected]
csdnダウンロードポイントのソースコードは前にアップロードされ、バグがあるのでgithubのソースコードをダウンロードすることをお勧めします.
Androidの万能アップドロップダウン・リフレッシュ・フレームワークを構築する--XRefreshView(二)
Androidの万能アップドロップダウン・リフレッシュ・フレームワークを構築する--XRefreshView(3)