Git Product home page Git Product logo

zrclistview's Introduction

ZrcListView

一个顺滑又漂亮的Android下拉刷新与加载更多列表组件。

根据系统自带ListView源码改造而来:

1.增加下拉刷新及滚动到底部自动加载的功能;
2.增加越界回弹效果;
2.增加自定义列表项动画的功能;

与其他下拉刷新列表组件的不同

1.其他下拉刷新组件的实现基本是通过动态更改Header的大小来实现的,而ZrcListView是修改了Listview的边界判断;
2.其他下拉刷新组件很容易在下拉刷新时变得卡顿,这是动态更改子View引起的,而ZrcListView的下拉刷新部分与滑动内容一样顺滑;
3.可以设置默认列表头偏移量,这使得实现透明ActionBar与ListView叠加变得很容易。

ZrcListView使用示例

设置ZrcListView相关属性

// 设置下拉刷新的样式
SimpleHeader header = new SimpleHeader(this);
header.setTextColor(0xff0066aa);
header.setCircleColor(0xff33bbee);
listView.setHeadable(header);

// 设置加载更多的样式
SimpleFooter footer = new SimpleFooter(this);
footer.setCircleColor(0xff33bbee);
listView.setFootable(footer);

// 设置列表项出现动画
listView.setItemAnimForTopIn(R.anim.topitem_in);
listView.setItemAnimForBottomIn(R.anim.bottomitem_in);

// 下拉刷新事件回调
listView.setOnRefreshStartListener(new OnStartListener() {
    @Override
    public void onStart() {
        refresh();
    }
});

// 加载更多事件回调
listView.setOnLoadMoreStartListener(new OnStartListener() {
    @Override
    public void onStart() {
        loadMore();
    }
});

##Screenshots Screenshot 0

Screenshot 1

Screenshot 2

Screenshot 3

zrclistview's People

Contributors

xfmax avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zrclistview's Issues

在ScrollView中无法使用

ScrollView中包括ZrcListView,无法触发加载更多事件。
注:ScrollView中包含ListView height已重新计算,不知道是不是需要针对ZrcListView需要另外计算。
计算代码如下:
private void setListViewHeightBasedOnChildren(ZrcListView listView) {

    // 获取ListView对应的Adapter 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
        return; 
    } 

    int totalHeight = 0; 
    int tmp = 0;
    for (int i = 0, len = listAdapter.getCount(); i < len; i++) { 
        // listAdapter.getCount()返回数据项的数目 
        View listItem = listAdapter.getView(i, null, listView); 
        // 计算子项View 的宽高 
        listItem.measure(0, 0);  
        // 统计所有子项的总高度 
        tmp = listItem.getMeasuredHeight();  
        totalHeight += tmp;  
    } 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    // params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));

// totalHeight += tmp/2;
params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);

    sv = (ScrollView)root.findViewById(R.id.video_cover_scroll);
    sv.smoothScrollTo(0, 0);
}

请教

看了一下你的代码,和系统Listview的实现机制差不多,请问您是参照系统代码改的吗?

某些情况下会报空指针

java.lang.NullPointerException
at zrc.widget.ZrcAbsListView.obtainView(ZrcAbsListView.java:486)
at zrc.widget.ZrcListView.makeAndAddView(ZrcListView.java:697)
at zrc.widget.ZrcListView.fillDown(ZrcListView.java:357)
at zrc.widget.ZrcListView.fillGap(ZrcListView.java:316)
at zrc.widget.ZrcAbsListView.trackMotionScroll(ZrcAbsListView.java:1575)
at zrc.widget.ZrcAbsListView$FlingRunnable.run(ZrcAbsListView.java:2128)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
at android.view.Choreographer.doCallbacks(Choreographer.java:579)
at android.view.Choreographer.doFrame(Choreographer.java:547)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5387)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)

好像不太兼容android5.0-呢

好像不太兼容android5.0-呢
12-16 09:30:58.470: E/AndroidRuntime(7807): at com.kuaidi100.courier.widget.zrclistview.ZrcListView.onInterceptTouchEvent(ZrcListView.java:161)

有bug

下拉刷新在它loading的时候如果按住屏幕上下滑动,等loading完之后才松开的话很容易出现bug,那个header的状态貌似不对,下一次继续下拉刷新的时候header会一直显示刷新成功,而不重新loading了

item不满时的bug,和一些建议

  1. item不满的时候,会自动触发loadmore
  2. 建议: 希望增加下拉的开关

起初我设置了head为null,调用listView.refresh()没有任何反应...于是我手动载入数据,中间就不会有任何动画显示,显得很变扭.希望能改善下.

所以希望另外封装一个下拉关闭的函数,并不要直接设置head=null,以达到.

下拉关闭,上拉关闭时, 用户调用listView.refresh(),head有载入动画,显示数据
下拉关闭,上拉开启时, 用户调用listView.refresh(),foot有载入动画,显示数据
下拉开启,上拉关闭时, 用户调用listView.refresh(),head有载入动画,显示数据
下拉开启,上拉开启时, 用户调用listView.refresh(),head有载入动画,显示数据

这样显得更人性点.

最后谢谢,lib写的很不错.有机会拜读学习下,

上拉加载问题

item是动态加载的,里面有image,item高度会动态调节。在调用startLoadMore后,出不来效果

startLoadMore(); // 开启LoadingMore功能 逻辑问题!?

listView.startLoadMore(); // 开启LoadingMore功能
这个startLoadMore功能开启以后会造成死循环;建议去掉自动加载更多的功能;因为这会在没有新的数据情况下不停的访问接口的死循环;给系统资源造成不必要的浪费;
建议加载更多的逻辑还是和 下拉刷新的逻辑一样,由用户向上拖动一定距离后触发一次加载更多的监听事件;

使用zListView.refresh();方法的问题

使用zListView.refresh()下拉刷新时,监听了setOnLoadMoreStartListener,发现上拉加载的接口也被调用,是什原因呀,应该是只有setOnRefreshStartListener这个接口回调才对,而不是上拉下拉都有回调

刷新数据时,同时会调用loadMore

下拉刷新后,listView.startLoadMore();将会自动触发上拉加载更多。。。。
数据解析:

if (arg0.size() > 0) {
                if (actionType == STATE_REFRESH) {
                    curPage = 0;
                    bankCards.clear();
                    listView.setRefreshSuccess();
                     listView.startLoadMore();////********执行这里会自动执行上拉方法*****************
                } else if (actionType == STATE_MORE) {
                    listView.setLoadMoreSuccess();
                }

                // 将本次查询的数据添加到bankCards中
                for (TestData td : arg0) {
                    bankCards.add(td);
                }
                curPage++;
                showToast("第" + (page + 1) + "页数据加载完成");
            } else if (actionType == STATE_MORE) {
                showToast("没有更多数据了");
                listView.stopLoadMore();
            } else if (actionType == STATE_REFRESH) {
                showToast("没有数据");
                listView.stopLoadMore();
            }

无法关闭上啦刷新。

public void stopRefreshing() {
isRefreshing = false;
}
我添加了这个方法,实现了关闭。但是,希望楼主优化下。
还有滑动有时候会卡卡的。 无法快速滑动

无限上拉加载更多的问题

重现场景

当加载到更多数据的填充的childview总和高度没有listview本身的高度高,会导致再一次回调loadmore。
直到childview总和高度超过listview、

bugs

mvp里面用这,完全不能刷新数据源
下拉加载只有start监听,并不能监听start了没有下拉加载,个人觉得不能设置自动加载吧,感觉需要对listview的scroll进行监听,效果还是不错,但仅仅是视觉上,有点华而不实

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.