Androidプルダウンで更新、プルアップでカスタムコントロールをロード/使用法と原則を表示

研究ノートの内容はgithubからのものです

 

android_my_pull_refresh_view

概観

これは一般的なプルダウンリフレッシュおよびプルアップ自動ロードコンポーネントです。コンポーネントはLinearLayoutから継承され、方向は垂直レイアウトで、Header、ContentView、およびFooterの3つの部分で構成されます。ContentViewの幅と高さはmatch_parent、footerです。ヘッダーとヘッダーの幅と高さはそれぞれmatch_parentとwrap_contentです。ヘッダーとフッターは最初にパディングを設定することによって非表示になり、ContentView領域のみが表示されます。ユーザーが上にプルダウンしてプルダウンし続けると、プルダウンリフレッシュ操作がトリガーされます。ユーザーが下に引き上げてプルし続けると、ロードするためにさらに多くの操作がトリガーされます。
詳細については、私のブログを参照してください

このプロジェクトのライブラリは、基本的な原理を説明するために使用されており、プロジェクトでの使用は推奨されていません。

## a、元のレイアウトの概略レイアウト
代替テキスト

ヘッダーとフッターは、パディングの設定後に画面からオフセットされます
代替テキスト

2.既存のコンポーネントの使用例

以下の例はすべてアクティビティで示されています。

2.1 PullRefreshListViewを使用する

public class MainActivity extends Activity {

    ListView mListView;

    PullRefreshListView mPullRefreshListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 下拉刷新的listview
        mPullRefreshListView = new PullRefreshListView(this);
        // 获取listview 对象, 即PullRefreshListView中的mContentView
        mListView = mPullRefreshListView.getContentView();

        List<String> datas = new ArrayList<String>();
        for (int i = 0; i < 5; i++) {
            datas.add(" Item - " + i);
        }

        // 设置adapter
        mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
                datas));

        // 下拉刷新
        mPullRefreshListView.setOnRefreshListener(new OnPullRefreshListener() {

            @Override
            public void onRefresh() {

                Toast.makeText(getApplicationContext(), "refresh", Toast.LENGTH_SHORT).show();
                mPullRefreshListView.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        mPullRefreshListView.refreshComplete();
                    }
                }, 2000);
            }
        });
        // 上拉自动加载
        mPullRefreshListView.setOnLoadMoreListener(new OnLoadMoreListener() {

            @Override
            public void onLoadMore() {
                Toast.makeText(getApplicationContext(), "load more", Toast.LENGTH_SHORT).show();
                mPullRefreshListView.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        mPullRefreshListView.loadMoreComplete();
                    }
                }, 1500);
            }
        });


        setContentView(mPullRefreshListView);

    }
}

プルダウンしてスクリーンショットを更新します

代替テキスト

上から下への自動読み込み
代替テキスト

2.2プルダウンして更新できるTextViewを使用する

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

 // PullRefreshTextView
        final PullRefreshTextView pullRefreshTextView = new PullRefreshTextView(this);
        pullRefreshTextView.getContentView().setText("下拉刷新TextView");
        // 下拉刷新
        pullRefreshTextView.setOnRefreshListener(new OnPullRefreshListener() {

            @Override
            public void onRefresh() {
                pullRefreshTextView.getContentView().setText(new Date().toGMTString());
                pullRefreshTextView.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        pullRefreshTextView.refreshComplete();
                    }
                }, 1000);
            }
        });

        // 上拉自动加载, TextView不能设置scroll listener ,所以无效
        pullRefreshTextView.setOnLoadMoreListener(new OnLoadMoreListener() {

            @Override
            public void onLoadMore() {
                Toast.makeText(getApplicationContext(), "textview load", Toast.LENGTH_SHORT).show();
                pullRefreshTextView.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        pullRefreshTextView.loadMoreComplete();
                    }
                }, 1000);
            }
        });

         setContentView(pullRefreshTextView);


    }
}

スクリーンショット

代替テキスト

3、コンポーネントを拡張する

3.1、PullRefreshBaseから継承

T为你要实现下拉刷新的View的类型,如ListView.       

3.2、ContentViewを初期化する

initContentViewメソッドをオーバーライドし、この関数でmContentViewオブジェクトを初期化します。たとえば、ListViewを例に考えてみましょう。

 /*
     * 初始化mContentView
     * @see com.uit.pullrefresh.base.PullRefreshBase#initContentView()
     */
    @Override
    protected void initContentView() {
        // 初始化mContentView
        mContentView = new ListView(getContext());
        // 设置OnScrollListener, 用以实现滑动到底部时的自动加载功能,如果不需要该功能可以不设置.
        mContentView.setOnScrollListener(this);
    }

3.3。メソッドを上書きして、上下にスライドするかどうかを決定します

たとえば、ListViewを例に考えてみましょう。

    /*
     * 是否滑动到了顶端,如果返回true, 则表示到了顶端,用户继续下拉则触发下拉刷新
     * @see com.uit.pullrefresh.base.PullRefreshBase#isTop()
     */
    @Override
    protected boolean isTop() {
        View firstChild = mContentView.getChildAt(0);
        if (firstChild == null) {
            return true;
        }
        return mContentView.getFirstVisiblePosition() == 0
                && (firstChild.getTop() >= mContentView.getTop());
    }

    /*
     * 下拉到listview 最后一项时则返回true, 将出发自动加载
     * @see com.uit.pullrefresh.base.PullRefreshBase#isShowFooterView()
     */
    @Override
    protected boolean isShowFooterView() {
        if (mContentView == null || mContentView.getAdapter() == null) {
            return false;
        }

        return mContentView.getLastVisiblePosition() == mContentView.getAdapter().getCount() - 1;
    } 

 


https://github.com/hehonghui/android_my_pull_refresh_view

追加:より強力なフレームワーク

https://github.com/scwang90/SmartRefreshLayout

おすすめ

転載: blog.csdn.net/qq_36355271/article/details/96858055