Android se despliega para actualizar, se abre para cargar controles personalizados / ver el uso y los principios

El contenido de las notas de estudio proviene de github

 

android_my_pull_refresh_view

Visión de conjunto

Se trata de un componente de carga automática desplegable y de actualización desplegable general. El componente hereda de LinearLayout, la dirección es el diseño vertical y consta de tres partes, a saber, Encabezado, ContentView y Pie de página. El ancho y alto de ContentView son match_parent, footer. El ancho y la altura del encabezado y el encabezado son match_parent y wrap_content respectivamente. Al principio del encabezado y pie de página, se ocultan mediante la configuración del relleno y solo se muestra el área ContentView. Cuando el usuario tira hacia la parte superior y continúa tirando hacia abajo, se activa la operación de actualización desplegable; cuando el usuario tira hacia arriba y continúa tirando hacia arriba, se activan más operaciones de carga.
Para obtener más información, consulte mi blog.

Las bibliotecas de este proyecto se utilizan para ilustrar los principios básicos y no se recomienda su uso en el proyecto.

## a, un diseño esquemático del diseño original
texto alternativo

El encabezado y el pie de página se desplazan de la pantalla después de configurar el relleno
texto alternativo

2. Ejemplos del uso de componentes existentes

Los siguientes ejemplos se muestran todos en una actividad.

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

    }
}

Tire hacia abajo para actualizar la captura de pantalla

texto alternativo

Carga automática de arriba a abajo
texto alternativo

2.2 Use TextView que se puede bajar para actualizar

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


    }
}

Captura de pantalla

texto alternativo

Tres, amplíe el componente

3.1, heredado de PullRefreshBase

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

3.2, inicializar ContentView

Anule el método initContentView e inicialice el objeto mContentView en esta función. Tomemos ListView como ejemplo, por ejemplo:

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

3.3. Sobrescriba el método para determinar si debe deslizarse hacia arriba o hacia abajo

Tomemos ListView como ejemplo, por ejemplo:

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

https://github.com/scwang90/SmartRefreshLayout

Supongo que te gusta

Origin blog.csdn.net/qq_36355271/article/details/96858055
Recomendado
Clasificación