PullToRefresh引入依赖,布局,适配器ListView上拉加载下拉刷新

使用PullToRefreshListView前 先在File-New-import Module 导入pulltoRefreshLibrary,
然后给项目 添加 module的依赖,
选择pulltoRefreshLibrary

activity_main.xml 
[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     >  
  7.   
  8.     <com.handmark.pulltorefresh.library.PullToRefreshListView  
  9.         xmlns:ptr="http://schemas.android.com/apk/res-auto"  
  10.         android:layout_height="match_parent"  
  11.         android:layout_width="match_parent"  
  12.         android:id="@+id/refresh_list_view"  
  13.         ptr:ptrDrawable="@drawable/default_ptr_flip"  
  14.         ptr:ptrAnimationStyle="flip"  
  15.         ptr:ptrHeaderBackground="#383838"  
  16.         ptr:ptrHeaderTextColor="#FFFFFF"  
  17.         >  
  18. </com.handmark.pulltorefresh.library.PullToRefreshListView>  
  19. </RelativeLayout>  
适配器里面的

[html] view plain copy
  1. public class MyAdapter extends BaseAdapter{  
  2.     List<DBean.NewslistBean> list;  
  3.     Context context;  
  4.     public MyAdapter(List<DBean.NewslistBean> list, Context context) {  
  5.         this.context = context;  
  6.         this.list = list;  
  7.   
  8.         ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(context);  
  9.         ImageLoader.getInstance().init(configuration);  
  10.     }  
  11.   
  12.     @Override  
  13.     public int getCount() {  
  14.         return list.size();  
  15.     }  
  16.   
  17.     @Override  
  18.     public Object getItem(int i) {  
  19.         return list.get(i);  
  20.     }  
  21.   
  22.     @Override  
  23.     public long getItemId(int i) {  
  24.         return i;  
  25.     }  
  26.   
  27.     @Override  
  28.     public View getView(int i, View view, ViewGroup viewGroup) {  
  29.         ViewHolder holder;  
  30.         if (view==null){  
  31.             view = View.inflate(context,R.layout.list_item,null);  
  32.   
  33.             holder = new ViewHolder();  
  34.             holder.imageView = view.findViewById(R.id.list_image);  
  35.             holder.textView = view.findViewById(R.id.list_text);  
  36.   
  37.             view.setTag(holder);  
  38.         }else{  
  39.             holder = (ViewHolder) view.getTag();  
  40.         }  
  41.         holder.textView.setText(list.get(i).getTitle());  
  42.         ImageLoader.getInstance().displayImage(list.get(i).getPicUrl(),holder.imageView);  
  43.         return view;  
  44.     }  
  45.     class ViewHolder{  
  46.         ImageView imageView;  
  47.         TextView textView;  
  48.     }  
  49. }  
MainActivity里面的
[html] view plain copy
  1. public class MainActivity extends AppCompatActivity {   
  2.    private List<DBean.NewslistBean> list = new ArrayList<>();   
  3.    private PullToRefreshListView refreshListView;int num = 1;     
  4.    private MyAdapter myAdapter;    private ILoadingLayout endlabels;   
  5.    private ILoadingLayout startlabels;   
  6.    @Override    
  7.    protected void onCreate(Bundle savedInstanceState) {    
  8.    super.onCreate(savedInstanceState);         
  9.    setContentView(R.layout.activity_main);       
  10.    refreshListView = (PullToRefreshListView)   
  11.    findViewById(R.id.refresh_list_view);         
  12.    getDataFromNet();          
  13.    //设置PullToRefreshListView刷新模式,上拉下拉都可以         
  14.    refreshListView.setMode(PullToRefreshBase.Mode.BOTH);          
  15.    //设置刷新显示的状态,可以下拉,不能上拉        
  16.    startlabels = refreshListView.getLoadingLayoutProxy(true,false);      
  17.    startlabels.setRefreshingLabel("正在刷新");        
  18.    startlabels.setPullLabel("下拉刷新");         
  19.    startlabels.setReleaseLabel("松开刷新");       
  20.    endlabels = refreshListView.getLoadingLayoutProxy(false,true);        
  21.    endlabels.setRefreshingLabel("正在加载");         
  22.    endlabels.setPullLabel("上拉加载");         
  23.    endlabels.setReleaseLabel("松开加载");         
  24.    //设置监听事件         
  25.    refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {     
  26.    @Override             
  27.    //下拉刷新调用            
  28.    public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {               
  29.    num =1;                
  30.    //获取数据              
  31.    getDataFromNetxiala();              
  32.    setAdapter();             
  33.    }           
  34.    @Override          
  35.    //上拉加载调用       
  36.    public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {     
  37.    num++;      
  38.    getDataFromNet();         
  39.    setAdapter();           
  40.    }       
  41.    });    
  42.    }     
  43.    private void setAdapter() {        
  44.    if (myAdapter==null) {          
  45.    myAdapter = new MyAdapter(list, MainActivity.this);       
  46.    refreshListView.setAdapter(myAdapter);        
  47.    }else{       
  48.    myAdapter.notifyDataSetChanged();       
  49.    }     
  50.    }     
  51.    private void getDataFromNet() {     
  52.    AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {    
  53.    @Override            
  54.    protected String doInBackground(Void... voids) {     
  55.    String path = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+num;          
  56.    try {                    
  57.    URL url = new URL(path);                  
  58.    HttpURLConnection connection = (HttpURLConnection) url.openConnection();    
  59.    connection.setRequestMethod("GET");            
  60.    connection.setConnectTimeout(5000);                   
  61.    connection.setReadTimeout(5000);                    
  62.    int responseCode = connection.getResponseCode();               
  63.    if (responseCode==200){                      
  64.    InputStream inputStream = connection.getInputStream();                   
  65.    String json = streamtoString(inputStream,"utf-8");                   
  66.    Thread.sleep(2000);                   
  67.    return json;                  
  68.    }               
  69.    } catch (Exception e) {    
  70.    e.printStackTrace();               
  71.    }                
  72.    return null;       
  73.    }           
  74.    @Override     
  75.    protected void onPostExecute(String json) {      
  76.    Gson gson = new Gson();               
  77.    DBean dBean = gson.fromJson(json, DBean.class);       
  78.    list.addAll(dBean.getNewslist());                
  79.    long currentTimeMillis = System.currentTimeMillis();        
  80.    Date date2new Date(currentTimeMillis);               
  81.    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");        
  82.    String format = dateFormat.format(date2);                
  83.    //设置刷新的时间                
  84.    endlabels.setLastUpdatedLabel(format);          
  85.    //停止刷新                
  86.    refreshListView.onRefreshComplete();      
  87.    setAdapter();        
  88.    }         
  89.    };        
  90.    asyncTask.execute();   
  91.    }    
  92.    private void getDataFromNetxiala() {     
  93.    AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {    
  94.    @Override          
  95.    protected String doInBackground(Void... voids) {         
  96.    String path = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+num;         
  97.    try {                
  98.    URL url = new URL(path);                   
  99.    HttpURLConnection connection = (HttpURLConnection) url.openConnection();          
  100.    connection.setRequestMethod("GET");                
  101.    connection.setConnectTimeout(5000);                 
  102.    connection.setReadTimeout(5000);                   
  103.    int responseCode = connection.getResponseCode();                
  104.    if (responseCode==200){                       
  105.    InputStream inputStream = connection.getInputStream();             
  106.    String json = streamtoString(inputStream,"utf-8");                      
  107.    Thread.sleep(2000);                       
  108.    return json;                     
  109.    }                
  110.    } catch (Exception e) {       
  111.    e.printStackTrace();         
  112.    }                
  113.    return null;        
  114.    }            
  115.    @Override           
  116.    protected void onPostExecute(String json) {     
  117.    Gson gson = new Gson();             
  118.    DBean dBean = gson.fromJson(json, DBean.class);       
  119.    list.addAll(0,dBean.getNewslist());               
  120.    long currentTimeMillis = System.currentTimeMillis();    
  121.    Date date2new Date(currentTimeMillis);              
  122.    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");     
  123.    String format = dateFormat.format(date2);               
  124.    //设置刷新的时间              
  125.    startlabels.setLastUpdatedLabel(format);       
  126.    //停止刷新                 
  127.    refreshListView.onRefreshComplete();       
  128.    setAdapter();            
  129.    }       
  130.    };        
  131.    asyncTask.execute();    
  132.    }     
  133.    private String streamtoString(InputStream inputStream, String charset) {      
  134.    try {      
  135.    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);          
  136.    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);        
  137.    String snull;          
  138.    StringBuilder builder = new StringBuilder();        
  139.    while((s=bufferedReader.readLine())!=null){       
  140.    builder.append(s);             
  141.    }             
  142.    return builder.toString();       
  143.    } catch (Exception e) {     
  144.    e.printStackTrace();        
  145.    }        return charset;     
  146.    }  
  147.    }  
  148.   
  149.     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值