Giter Site home page Giter Site logo

cbpullrefreshlistview's Introduction

CBPullRefreshListView

RecyclerView版本 DragableRecyclerView

下拉刷新很常见,listview带侧滑功能的也很常见。github上将两者结合的也很多比如:SwipeMenuListView是带有侧滑功能的lisetview但是无法下拉刷新。而Android-PullToRefresh-SwipeMenuListView-Sample是将几个功能完整结合。看了下他们的实现,是在以前的XListView基础上整合。但listview里面的下拉刷新和上拉加载的动作与刷新头耦合比较严重。如果想自定义自己的刷新头样式稍微麻烦点。于是就想把下拉刷新的功能和刷新头的展示样式抽离分开。listview只管将一些下拉上拉的事件传递出来。刷新头通过实现这些状态方法去做自己想要的刷新样式就可以了。




引入

Step 1. Add the JitPack repository to your build file

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

Step 2. Add the dependency

dependencies {
        compile 'com.github.yilylong:CBPullRefreshListView:1.0.0'
}

自定义刷新头

继承CBRefreshHeaderView 实现几个状态下的回调的方法比如:

/**
 * 设置当前状态
 * @param state
 */
@Override
public void setState(int state) {

}
/**
 * 下拉刷新的回调
 */
@Override
public void pullToRefresh() {

}
/**
 * 释放刷新的回调
 */
@Override
public void releaseToRefresh() {

}
/**
 * 正在刷新
 */
@Override
public void onRefreshing() {

}
/**
 * 设置头部或底部的可见高度
 * @param height
 */
@Override
public void setVisiableHeight(int height) {

}
/**
 * 获取可见高度
 * @return
 */
@Override
public int getVisiableHeight() {
    return 0;
}
/**
 * 正在拖动
 * @param deltaY
 */
@Override
public void onDragSlide(float deltaY) {

}

在这些方法中去改变刷新头不同状态下的表现形式。(下拉刷新是通过改变头部高度实现的)可以参考CBRefreshHeader MyCustomRrefreshHeader 有哪些状态回调可以查看 CBRefreshState

CBPullRefreshListView一些其他方法:

设置自定义的刷新头

mListView.setRefreshHeader(myRefreshHeader);

设置是否显示顶部的搜索栏(可自定义)

mListView.showTobSearchBar(true);
mListView.setTopSearchBar(myTopSearchBar);

设置swipe开关

mListView.setSwipeEnable(false)

设置下拉刷新的监听接口

mListView.setOnPullRefreshListener(new CBPullRefreshListView.OnPullRefreshListener() {
        @Override
        public void onRefresh() {
            mListView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mListView.stopRefresh();
                }
            }, 3000);
        }

        @Override
        public void onLoadMore() {
            mListView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mListView.stopLoadMore();
                }
            }, 3000);
        }

        @Override
        public void onUpdateRefreshTime(long time) {

        }

    });

设置侧滑菜单项目

SwipeMenuCreator creator = new SwipeMenuCreator() {

        @Override
        public void create(SwipeMenu menu) {

            SwipeMenuItem collectionItem = new SwipeMenuItem(getApplicationContext());
            collectionItem.setBackground(R.color.green);
            collectionItem.setWidth(dp2px(CustomRefreshHeaderActivity.this, 90));
            collectionItem.setTitle("收藏");
            collectionItem.setTitleSize(18);
            collectionItem.setTitleColor(Color.WHITE);
            collectionItem.setIcon(R.drawable.icon_collection);
            menu.addMenuItem(collectionItem);

            SwipeMenuItem deleteItem = new SwipeMenuItem(getApplicationContext());
            deleteItem.setBackground(R.color.red);
            deleteItem.setWidth(dp2px(CustomRefreshHeaderActivity.this, 90));
            deleteItem.setTitle("删除");
            deleteItem.setIcon(R.drawable.icon_delete);
            deleteItem.setTitleSize(18);
            deleteItem.setTitleColor(Color.WHITE);
            menu.addMenuItem(deleteItem);
        }
    };
    mListView.setMenuCreator(creator);

设置侧滑菜单项的点击添加和listview的item点击监听

mListView.setOnMenuItemClickListener(new CBPullRefreshListView.OnMenuItemClickListener() {
        @Override
        public void onMenuItemClick(int position, SwipeMenu menu, int index) {
            Toast.makeText(CustomRefreshHeaderActivity.this, "点击了item swipe 菜单的第" + index, Toast.LENGTH_SHORT).show();
        }
    });
mListView.setOnItemClickListener(new CBPullRefreshListView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(CustomRefreshHeaderActivity.this,"点击了"+position,Toast.LENGTH_SHORT).show();
        }
    });

cbpullrefreshlistview's People

Contributors

yilylong 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cbpullrefreshlistview's Issues

一点疑问

刚看了一下你的源码,感觉内部代码耦合度有点高啊。

如果把arraylist clear掉添加新数据 ,adapter的notifyDataSetChanged方法就会无效

@Override public void onLoadMore() { // mListView.postDelayed(new Runnable() { // @Override // public void run() { // mListView.stopLoadMore(); // } // }, 3000); DataList.clear(); for (int i = 0; i < 30; i++) { if (i==0){ DataList.add(new String("this is a cbpullrefreshlistview test" + 0000)); }else { DataList.add(new String("this is a cbpullrefreshlistview test" + i)); } } mAdatper.notifyDataSetChanged(); }

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.