Android tirez vers le bas pour actualiser, tirez vers le haut pour charger les contrôles personnalisés / afficher l'utilisation et les principes

Le contenu des notes d'étude provient de github

 

android_my_pull_refresh_view

Aperçu

Il s'agit d'un composant général à chargement automatique d'actualisation et d'extraction. Le composant hérite de LinearLayout, la direction est la disposition verticale et se compose de trois parties, à savoir En-tête, ContentView et Pied de page. La largeur et la hauteur de ContentView sont match_parent, footer. La largeur et la hauteur de l'en-tête et de l'en-tête sont respectivement match_parent et wrap_content. L'en-tête et le pied de page seront masqués en définissant le remplissage au début, et seule la zone ContentView sera affichée. Lorsque l'utilisateur descend vers le haut et continue de tirer vers le bas, l'opération d'actualisation de tirage vers le bas est déclenchée; lorsque l'utilisateur tire vers le bas et continue de tirer vers le haut, d'autres opérations sont déclenchées pour charger.
Pour plus d'informations, veuillez consulter mon blog

Les bibliothèques de ce projet sont utilisées pour illustrer les principes de base et il n'est pas recommandé de les utiliser dans le projet.

## a, une mise en page schématique de la mise en page d' origine
Texte alternatif

L'en-tête et le pied de page sont décalés de l'écran une fois le remplissage défini
Texte alternatif

2. Exemples d'utilisation de composants existants

Les exemples suivants sont tous illustrés dans une activité.

2.1 Utiliser 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);

    }
}

Déroulez pour actualiser la capture d'écran

Texte alternatif

Chargement automatique de haut en bas
Texte alternatif

2.2 Utiliser TextView qui peut être tiré vers le bas pour actualiser

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


    }
}

Capture d'écran

Texte alternatif

Troisièmement, étendre le composant

3.1, hérité de PullRefreshBase

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

3.2, initialiser ContentView

Remplacez la méthode initContentView et initialisez l'objet mContentView dans cette fonction. Prenons ListView comme exemple, par exemple:

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

3.3. Écraser la méthode pour déterminer s'il faut glisser vers le haut et vers le bas

Prenons ListView comme exemple, par exemple:

    /*
     * 是否滑动到了顶端,如果返回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

Append: un framework plus puissant

https://github.com/scwang90/SmartRefreshLayout

Je suppose que tu aimes

Origine blog.csdn.net/qq_36355271/article/details/96858055
conseillé
Classement