ListView下拉刷新与上拉加载

来源:互联网 发布:西门子200编程电缆 编辑:程序博客网 时间:2024/06/05 17:46

这里使用的是开源框架pull-to-refresh 里的 ListView功能(PullToRefreshListView)

效果图:



如何使用:
在AndroidStudio中添加 pull-to-refresh
1)File→ Project Structure→ Dependencies  →LibraryDependency →搜索refresh 添加依赖即可
2)或者 gradle中直接添加依赖
compile 'com.github.userswlwork:pull-to-refresh:1.0.0'


使用PullToRefreshListView

代码:

public class MainActivity extends Activity {    private List<String> mList;    private PullToRefreshListView mListView;    private MyAdapter mAdapter;    private final static int PULL_DOWN_TO_REFRESH = 1;//下拉刷新    private final static int PULL_UP_TO_REFRESH = 2;//上拉加载    private Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case PULL_DOWN_TO_REFRESH:                    mList.add((String) msg.obj);                    mAdapter.notifyDataSetChanged();                    mListView.onRefreshComplete();                    break;                case PULL_UP_TO_REFRESH:                    mList.add((String) msg.obj);                    mAdapter.notifyDataSetChanged();                    mListView.onRefreshComplete();                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 得到控件        mListView = (PullToRefreshListView) findViewById(R.id.pListView);        // 给ListView添加假数据        mList = new ArrayList<>();        for (int i = 0; i < 3; i++) {            mList.add("这是第" + i + "个Title");        }        //设置适配器        mAdapter = new MyAdapter(this, mList);        mListView.setAdapter(mAdapter);        //设置下拉时显示的文字        ILoadingLayout startLabels = mListView.getLoadingLayoutProxy();        startLabels.setPullLabel("你可劲拉,拉...");// 刚下拉时,显示的提示        startLabels.setRefreshingLabel("好嘞,正在刷新...");// 刷新时        startLabels.setReleaseLabel("你敢放,我就敢刷新...");// 下来达到一定距离时,显示的提示        mListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {            //下拉刷新执行的代码            @Override            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {                //开启一个线程执行刷新步骤                Message message = Message.obtain();                message.what = PULL_DOWN_TO_REFRESH;                message.obj = "下拉刷新出来了一个item";                mHandler.sendMessage(message);            }            //上拉加载执行的代码            @Override            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {                //开启一个线程执行刷新步骤                Message message = Message.obtain();                message.what = PULL_UP_TO_REFRESH;                message.obj = "上拉加载出来了一个item";                mHandler.sendMessage(message);            }        });    }}

public class MyAdapter extends BaseAdapter {    private Context mContext;    private List<String> mList;    public MyAdapter(Context pContext, List<String> pList) {        mContext = pContext;        mList = pList;    }    @Override    public int getCount() {        return mList.size();    }    @Override    public Object getItem(int i) {        return mList.get(i);    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {       ViewHolder mHolder;        if (view == null) {            mHolder=new ViewHolder();            view = LayoutInflater.from(mContext).inflate(R.layout.lv_item, null);           // mHolder.tvContent= (TextView) view.findViewById(R.id.tvContent);            mHolder.tvTitle= (TextView) view.findViewById(R.id.tvTiTle);            view.setTag(mHolder);        }else {            mHolder= (ViewHolder) view.getTag();        }        mHolder.tvTitle.setText(mList.get(i));      //  mHolder.tvContent.setText(mList.get(i));        return view;    }    private class  ViewHolder{        TextView tvTitle,tvContent;    }}

xml代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <com.handmark.pulltorefresh.library.PullToRefreshListView        xmlns:ptr="http://schemas.android.com/apk/res-auto"        android:id="@+id/pListView"        android:layout_width="match_parent"        android:layout_height="match_parent"        ptr:ptrMode="both" /></RelativeLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal">    <ImageView        android:layout_width="80dp"        android:layout_height="80dp"        android:src="@mipmap/ic_launcher" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="78dp"        android:layout_marginLeft="6dp"        android:layout_marginTop="6dp"        android:orientation="vertical">        <TextView            android:id="@+id/tvTiTle"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="我是标题"            android:textColor="#000"            android:textSize="20sp" />        <TextView            android:id="@+id/tvContent"            android:layout_width="match_parent"            android:layout_height="0dp"            android:layout_weight="1"            android:text="我是内容"            android:textColor="#000"            android:textSize="20sp" />    </LinearLayout></LinearLayout>

注意点 :
在设置 ptr:ptrMode="both"属性前需要先引入  xmlns:ptr="http://schemas.android.com/apk/res-auto" 自定义属性

设置下拉时显示的文字:
ILoadingLayout startLabels = mListView.getLoadingLayoutProxy();
startLabels.setPullLabel("你可劲拉,拉...");// 刚下拉时,显示的提示
startLabels.setRefreshingLabel("好嘞,正在刷新...");// 刷新时
startLabels.setReleaseLabel("你敢放,我就敢刷新...");// 下来达到一定距离时,显示的提示


设置下拉刷新监听事件

setOnRefreshListener


pull_to_refresh的其他功能:

http://blog.csdn.net/lmj623565791/article/details/38238749


0 0