PullToRefreshScrollView的使用

以下亲测可行,希望能帮到你


布局文件ScrollView嵌套ListView,使用PullToRefresScrollView代替原本的ScrollView,自定义的ListView解决嵌套时高度计算问题 

<?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="pulltiscroll.mo.com.myapplication.MainActivity">

    <com.handmark.pulltorefresh.library.PullToRefreshScrollView
        android:id="@+id/pulltoscroll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <pulltiscroll.mo.com.myapplication.MyListView
                android:id="@+id/lv"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
        </RelativeLayout>
    </com.handmark.pulltorefresh.library.PullToRefreshScrollView>

</RelativeLayout>

自定义的ListView

/**
 * Created by Administrator on 2016/9/14.
 */
public class MyListView extends ListView {
    public MyListView(Context context) {
        super(context);
    }

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

    public MyListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

调用的代码

public class MainActivity extends AppCompatActivity {
    ScrollView mScrollView;
    private PullToRefreshScrollView mPullRefreshScrollView;
    private List<String> ls;
    private List<String> ls2;
    private MyListView lv;

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

        //查找到控件
        mPullRefreshScrollView = (PullToRefreshScrollView) findViewById(R.id.pulltoscroll);


        //设置刷新或者加载时候显示的内容
        mPullRefreshScrollView.getLoadingLayoutProxy().setLastUpdatedLabel("lastUpdateLabel");
        mPullRefreshScrollView.getLoadingLayoutProxy().setPullLabel("PULLLABLE");
        mPullRefreshScrollView.getLoadingLayoutProxy().setRefreshingLabel("refreshingLabel");
        mPullRefreshScrollView.getLoadingLayoutProxy().setReleaseLabel("releaseLabel");
        // 上拉、下拉或者全部允许
        mPullRefreshScrollView.setMode(PullToRefreshBase.Mode.PULL_FROM_START); //设置允许下拉

        mPullRefreshScrollView.setMode(PullToRefreshBase.Mode.PULL_FROM_END); //设置允许上拉
        mPullRefreshScrollView.setMode(PullToRefreshBase.Mode.BOTH); //设置上下拉均允许


        //这个被注释掉的方法在刷新完成时被调用,但加载完成也会走这个方法,我们自己进行判断容易考虑不周,所以使用OnRefreshListener2进行回调监听

        mPullRefreshScrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ScrollView>() {
            @Override
            public void onRefresh(PullToRefreshBase<ScrollView> refreshView) {
                Toast.makeText(MainActivity.this, "刷新完成", Toast.LENGTH_SHORT).show();
                mPullRefreshScrollView.onRefreshComplete();
            }

            OnRefreshListener2
        });


        //这是OnRefreshListener2,里面有分别对应的加载和刷新执行完之后分别执行的回调

        mPullRefreshScrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                Toast.makeText(MainActivity.this, "刷新完成", Toast.LENGTH_SHORT).show();
                mPullRefreshScrollView.onRefreshComplete();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                Toast.makeText(MainActivity.this, "加载完成", Toast.LENGTH_SHORT).show();
                mPullRefreshScrollView.onRefreshComplete();
            }
        });


    }
}
public class MainActivity extends AppCompatActivity {
    ScrollView mScrollView;
    private PullToRefreshScrollView mPullRefreshScrollView;
    private List<String> ls;
    private List<String> ls2;
    private MyListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mPullRefreshScrollView = (PullToRefreshScrollView) findViewById(R.id.pulltoscroll);
        //这几个刷新Label的设置
        mPullRefreshScrollView.getLoadingLayoutProxy().setLastUpdatedLabel("lastUpdateLabel");
        mPullRefreshScrollView.getLoadingLayoutProxy().setPullLabel("PULLLABLE");
        mPullRefreshScrollView.getLoadingLayoutProxy().setRefreshingLabel("refreshingLabel");
        mPullRefreshScrollView.getLoadingLayoutProxy().setReleaseLabel("releaseLabel");
        上拉、下拉设定 // mPullRefreshScrollView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
        mPullRefreshScrollView.setMode(PullToRefreshBase.Mode.PULL_FROM_END);
        mPullRefreshScrollView.setMode(PullToRefreshBase.Mode.BOTH);
        lv = (MyListView) findViewById(R.id.lv);
        ls = new ArrayList<>();
        ls2 = new ArrayList<>();
        add();
        ls2.addAll(ls);
        seta();
        mScrollView = mPullRefreshScrollView.getRefreshableView();
        PullToRefreshScrollView
        mPullRefreshScrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ScrollView>() {
            @Override
            public void onRefresh(PullToRefreshBase<ScrollView> refreshView) {
                Toast.makeText(MainActivity.this, "刷新完成", Toast.LENGTH_SHORT).show();
                mPullRefreshScrollView.onRefreshComplete();
            }
        });
        mPullRefreshScrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                Toast.makeText(MainActivity.this, "刷新完成", Toast.LENGTH_SHORT).show();
                add();
                ls2.addAll(ls);
                seta();
                mPullRefreshScrollView.onRefreshComplete();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                Toast.makeText(MainActivity.this, "加载完成", Toast.LENGTH_SHORT).show();
                add();
                ls2.addAll(ls);
                seta();
                mPullRefreshScrollView.onRefreshComplete();
            }
        });
    }

    private void seta() {
        lv.setAdapter(new MyAdapter(ls2, MainActivity.this));
    }

    private void add() {
        for (int i = 0; i < 100; i++) {
            ls.add("条目" + i);
        }
    }
}


 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值