安卓高级2 swipeReferenceLayout 使用案例 和完善其自定义上拉

swipeReferenceLayout 无法完成上来加载数据所以自定义了一个类

Activity.java

package qianfeng.com.swipelayoutdemo;

import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private SwipeRefreshLayout swipeRefreshLayout;
    private List<String> list = new ArrayList<>();
    private ListView listView;
    private ReferenceLayout referenceLayout;
    private ListView referenceListView;
    private ArrayAdapter<String> adapter;
    private List<String> total = new ArrayList<>();
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 100:
                    adapter.notifyDataSetChanged();
                    referenceLayout.setRefreshing(false);
                    break;
                case 200:
                    adapter.notifyDataSetChanged();
                    referenceLayout.setLoadingState(false);
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        referenceListView = (ListView) findViewById(R.id.referenceListView);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, total);
        referenceListView.setAdapter(adapter);


        referenceLayout = (ReferenceLayout) findViewById(R.id.referenceLayout);
        referenceLayout.setColorSchemeColors(Color.RED, Color.BLACK);
        referenceLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                // 下拉刷新的监听器
                total.clear();
                initData(100);


            }
        });
        referenceLayout.setOnLoadingListener(new ReferenceLayout.OnLoadingListener() {
            @Override
            public void onLoading() {
                //上拉加载更多的监听器

                initData(200);


            }
        });

        initData(100);
        adapter.notifyDataSetChanged();

    }

    private void initData(final int what) {
        new Thread() {
            @Override
            public void run() {
                super.run();
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                for (int i = 0; i < 20; i++) {
                    total.add("景田" + i);
                }
                handler.sendEmptyMessage(what);
            }
        }.start();

    }

    // 默认 swipeReferenceLayout 的用法
    public void defaultView() {

        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeLayout);
        listView = (ListView) findViewById(R.id.listView);
        // 设置颜色
        swipeRefreshLayout.setColorSchemeColors(Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW);
        for (int i = 0; i < 5; i++) {
            list.add("xixi" + i);
        }
        ArrayAdapter adapte = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapte);

        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                Toast.makeText(MainActivity.this, "hahahah", Toast.LENGTH_SHORT).show();

                //    刷新完成后   将刷新的View 隐藏掉
//                swipeRefreshLayout.setRefreshing(false);

            }
        });

    }
}

ReferenceLayout.java 自定义

package qianfeng.com.swipelayoutdemo;

import android.content.Context;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;

/**
 * Created by ${Mr.Zhao} on 2016/10/18.
 */
public class ReferenceLayout extends SwipeRefreshLayout implements AbsListView.OnScrollListener {

    //2. 实例化接口对象
    private OnLoadingListener listener;
    private View footerView;
    private ListView mListView;
    private boolean isLoading = false;

    //1. 定义 一个接口
    public interface OnLoadingListener {
        public void onLoading();
    }

    //3. 提供设置监听器的方法
    public void setOnLoadingListener(OnLoadingListener listener) {
        this.listener = listener;
    }


    //  4.  构造布局
    public ReferenceLayout(Context context) {
        super(context);
        initFooterView(context);
    }

    public ReferenceLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        initFooterView(context);
    }

    // 实例化 一个  加载更多的时候的 底布局
    private void initFooterView(Context context) {
        footerView = LayoutInflater.from(context).inflate(R.layout.footer_layout, null);
    }


    // 6   创建一个方法  用来  添加或者移除 footerView
    public void setLoadingState(boolean state) {
        isLoading = state;
        if (state) {
            mListView.addFooterView(footerView);
        } else {
            mListView.removeFooterView(footerView);
        }
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        //  5. 获取   ListView
        int childCount = getChildCount();
        if (childCount > 0) {
            for (int i = 0; i < childCount; i++) {
                View view = getChildAt(i);
                if (view instanceof ListView) {
                    mListView = (ListView) view;
                    mListView.setOnScrollListener(this);
                }
            }
        }
    }


    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {

    }

    // 7   判断ListView 滑动到了 底部
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        if (firstVisibleItem + visibleItemCount == totalItemCount && !isLoading) {
            setLoadingState(true);
            listener.onLoading();
        }
    }
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context="qianfeng.com.swipelayoutdemo.MainActivity">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone">

        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></ListView>
    </android.support.v4.widget.SwipeRefreshLayout>

    <qianfeng.com.swipelayoutdemo.ReferenceLayout
        android:id="@+id/referenceLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ListView
            android:id="@+id/referenceListView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></ListView>

    </qianfeng.com.swipelayoutdemo.ReferenceLayout>
</RelativeLayout>

其上拉布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/footer_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="加载更多"
        android:textSize="20sp" />
</LinearLayout>

posted on 2016-10-18 21:13  木鱼哥  阅读(132)  评论(0编辑  收藏  举报

导航