PulltoRefresh上拉下拉刷新


package com.edu.jereh.myapplicationzzzz;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ListView;

import com.edu.jereh.myapplicationzzzz.entity.MyListAdapter;
import com.edu.jereh.myapplicationzzzz.entity.News;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;

public class PullToRefreshActivity extends AppCompatActivity {
    private PullToRefreshListView pv;
    private ArrayList<News> list;
    private MyListAdapter ma;
    private  int PageCount=1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pull_to_refresh);
        pv = (PullToRefreshListView) findViewById(R.id.pv);
        list = new ArrayList<>();
        for (int j = 0; j <= 20; j++) {
            list.add(new News("新闻" + j, "未来网", "今天", R.mipmap.ic_launcher, "评论"));
        }
        ma = new MyListAdapter(this, list);
        pv.setAdapter(ma);
        pv.setMode(PullToRefreshBase.Mode.BOTH);//设置上下拉动都能刷新
       ILoadingLayout upstarLoading =  pv.getLoadingLayoutProxy(true, false);
        upstarLoading.setPullLabel("下拉————刷新");
        upstarLoading.setRefreshingLabel("刷新中");
        upstarLoading.setReleaseLabel("下拉刷新完成");
        ILoadingLayout downstartLoading = pv.getLoadingLayoutProxy(false,true);
        downstartLoading.setPullLabel("上啦————刷新");
        downstartLoading.setRefreshingLabel("——上啦刷新中——");
        downstartLoading.setReleaseLabel("上拉刷新完成");
        View v = getLayoutInflater().inflate(R.layout.pv_header_layout,null);
        pv.getRefreshableView().addHeaderView(v);//加载头布局
        pv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {//上啦下拉监听要设置2这个接口
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                PageCount = 1;
                list.clear();
                new MyRefresh().execute();
            }//下拉

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
              new MyRefresh().execute();
            }//上啦
        });
    }
    public  void loadData() {
        for (int j = PageCount; j < (20 + PageCount); j++) {
            list.add(new News("新闻增加" + j, "未来网", "今天", R.mipmap.ic_launcher, "评论"));
        }
        PageCount += 20;
        ma.notifyDataSetChanged();
    }
    public class MyRefresh extends AsyncTask<Void,Void,Void>{

        @Override
        protected Void doInBackground(Void... params) {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            loadData();
            pv.onRefreshComplete();
        }
    }
}
设置上下都能刷新,上拉刷新listview数量增加20,下拉清空,还设计了头布局。由于未连接网络在下面方法中抛出一个异常手动设置刷新的时间为3秒
 
Listview适配器代码:
 
package com.edu.jereh.myapplicationzzzz.entity;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.edu.jereh.myapplicationzzzz.R;

import java.util.List;

/**
 * Created by sa on 2016/8/5.
 */
public class MyListAdapter extends BaseAdapter {
    private List<News> myData;
    private Context context;
    public MyListAdapter(Context context,List<News> myData){
        this.context = context;
        this.myData = myData;
    }
    @Override
    public int getCount() {

        return myData.size();
    }

    @Override
    public Object getItem(int position) {

        return myData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView( int position, View convertView, ViewGroup parent) {
//        View view = LayoutInflater.from(context).inflate(R.layout.list_layout_base,null);
//        TextView title = (TextView)view.findViewById(R.id.title);
//        TextView pubData = (TextView)view.findViewById(R.id.pubData);
//        TextView from = (TextView) view.findViewById(R.id.from);
//        ImageView img = (ImageView) view.findViewById(R.id.img);
//        News news = myData.get(position);
//        title.setText(news.getTitle());
//        pubData.setText(news.getPubData());
//        from.setText(news.getFrom());
//        img.setImageResource(news.getImg());
        ViewHolder vh;//viewholder为的是listview滚动时候快速设置,不必每次创建新对象,从而节省性能
        if(convertView==null){
            vh = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.list_layout_base,null);
            vh.title = (TextView) convertView.findViewById(R.id.title);
            vh.pubData = (TextView) convertView.findViewById(R.id.pubData);
            vh.title = (TextView) convertView.findViewById(R.id.title);
            vh.img = (ImageView) convertView.findViewById(R.id.img);
            vh.from = (TextView) convertView.findViewById(R.id.from);

            convertView.setTag(vh);
        }else {
            vh = (ViewHolder) convertView.getTag();
        }
        vh.img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Toast.makeText(context, "点击了图片" + position, Toast.LENGTH_SHORT).show();
            }
        });
        News ns = myData.get(position);
        vh.title.setText(ns.getTitle());
        vh.pubData.setText(ns.getPubData());
        vh.img.setImageResource(ns.getImg());
        vh.from.setText(ns.getFrom());
        return convertView;
    }
    private   class ViewHolder{
        TextView title;
        TextView pubData;
        TextView from;
        ImageView img;
    }
}

Listview单布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="150dp">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是标题"
        android:gravity="center"
        android:id="@+id/title"
        android:layout_marginTop="27dp"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/pubData"
        android:layout_marginStart="97dp" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="未来网"
        android:gravity="center"
        android:id="@+id/pubData"
        android:layout_alignBaseline="@+id/from"
        android:layout_alignBottom="@+id/from"
        android:layout_alignParentStart="true" />
    <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@mipmap/mm1"
        android:id="@+id/img"
        android:scaleType="centerCrop"
        android:layout_alignTop="@+id/title"
        android:layout_alignParentEnd="true" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="评论"
        android:gravity="center"
        android:id="@+id/from"
        android:layout_below="@+id/img"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="36dp" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="今天"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="15dp"/>

</RelativeLayout>

 
效果展示:未刷新前
 
  
 
上拉刷新后下方增加20条,再上拉再加20条:
 
  
 
   
 
下啦刷新后清除上拉增加的20条,只显示最新的20条:
 
  
 
    
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值