zoukankan      html  css  js  c++  java
  • 1、ListView自定义控件下拉刷新(一)

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     android:layout_width="match_parent"
     3     android:layout_height="match_parent"
     4     android:background="#f5f5f5" >
     5 
     6     <zrc.widget.ZrcListView
     7         android:id="@+id/zListView"
     8         android:layout_width="match_parent"
     9         android:layout_height="match_parent" >
    10     </zrc.widget.ZrcListView>
    11 
    12     <RelativeLayout
    13         android:layout_width="match_parent"
    14         android:layout_height="50dp"
    15         android:layout_alignParentTop="true"
    16         android:background="#ccffffff" >
    17 
    18         <TextView
    19             android:layout_width="wrap_content"
    20             android:layout_height="wrap_content"
    21             android:layout_centerInParent="true"
    22             android:text="常见国家"
    23             android:textSize="20sp" />
    24 
    25         <View
    26             android:layout_width="match_parent"
    27             android:layout_height="1px"
    28             android:layout_alignParentBottom="true"
    29             android:layout_centerHorizontal="true"
    30             android:background="#cccccc" />
    31 
    32     </RelativeLayout>
    33     
    34 </RelativeLayout>
      1   import java.util.ArrayList;
      3 import android.app.Activity;
      4 import android.os.Bundle;
      5 import android.os.Handler;
      6 import android.view.View;
      7 import android.view.ViewGroup;
      8 import android.widget.BaseAdapter;
      9 import android.widget.TextView;
     11 import zrc.widget.SimpleFooter;
     12 import zrc.widget.SimpleHeader;
     13 import zrc.widget.ZrcListView;
     14 import zrc.widget.ZrcListView.OnStartListener;
     15 
     16 public class MainActivity extends Activity {
     17     private ZrcListView listView;
     18     private Handler handler;
     19     private ArrayList<String> msgs;
     20     private int pageId = -1;
     21     private MyAdapter adapter;
     22 
     23     private static final String[][] names = new String[][]{
     24         {"加拿大","瑞典","澳大利亚","瑞士","新西兰","挪威","丹麦","芬兰","奥地利","荷兰","德国","日本","比利时","意大利","英国"},
     25         {"德国","西班牙","爱尔兰","法国","葡萄牙","新加坡","希腊","巴西","美国","阿根廷","波兰","印度","秘鲁","阿联酋","泰国"},
     26         {"智利","波多黎各","南非","韩国","墨西哥","土耳其","埃及","委内瑞拉","玻利维亚","乌克兰"},
     27         {"以色列","海地","中国","沙特阿拉伯","俄罗斯","哥伦比亚","尼日利亚","巴基斯坦","伊朗","伊拉克"}
     28     };
     29 
     30     @Override
     31     protected void onCreate(Bundle savedInstanceState) {
     32         super.onCreate(savedInstanceState);
     33         setContentView(R.layout.activity_main);
     34 
     35         listView = (ZrcListView) findViewById(R.id.zListView);
     36         handler = new Handler();
     37 
     38         // 设置默认偏移量,主要用于实现透明标题栏功能。(可选)
     39         float density = getResources().getDisplayMetrics().density;
     40         listView.setFirstTopOffset((int) (50 * density));
     41 
     42         // 设置下拉刷新的样式(可选,但如果没有Header则无法下拉刷新)
     43         SimpleHeader header = new SimpleHeader(this);
     44         header.setTextColor(0xff0066aa);
     45         header.setCircleColor(0xff33bbee);
     46         listView.setHeadable(header);
     47 
     48         // 设置加载更多的样式(可选)
     49         SimpleFooter footer = new SimpleFooter(this);
     50         footer.setCircleColor(0xff33bbee);
     51         listView.setFootable(footer);
     52 
     53         // 设置列表项出现动画(可选)
     54         listView.setItemAnimForTopIn(R.anim.topitem_in);
     55         listView.setItemAnimForBottomIn(R.anim.bottomitem_in);
     56 
     57         // 下拉刷新事件回调(可选)
     58         listView.setOnRefreshStartListener(new OnStartListener() {
     59             @Override
     60             public void onStart() {
     61                 refresh();
     62             }
     63         });
     64 
     65         // 加载更多事件回调(可选)
     66         listView.setOnLoadMoreStartListener(new OnStartListener() {
     67             @Override
     68             public void onStart() {
     69                 loadMore();
     70             }
     71         });
     72 
     73         adapter = new MyAdapter();
     74         listView.setAdapter(adapter);
     75         listView.refresh(); // 主动下拉刷新
     76     }
     77 
     78     private void refresh(){
     79         handler.postDelayed(new Runnable() {
     80             @Override
     81             public void run() {
     82                 // 随机数模拟成功失败。这里从有数据开始。
     83                 int rand = (int) (Math.random() * 2); 
     84                 if(rand == 0 || pageId == -1){
     85                     pageId = 0;
     86                     msgs = new ArrayList<String>();
     87                     for(String name:names[0]){
     88                         msgs.add(name);
     89                     }
     90                     adapter.notifyDataSetChanged();
     91                     listView.setRefreshSuccess("加载成功"); // 通知加载成功
     92                     listView.startLoadMore(); // 开启LoadingMore功能
     93                 }else{
     94                     listView.setRefreshFail("加载失败");
     95                 }
     96             }
     97         }, 2 * 1000);
     98     }
     99 
    100     private void loadMore(){
    101         handler.postDelayed(new Runnable() {
    102             @Override
    103             public void run() {
    104                 pageId++;
    105                 if(pageId<names.length){
    106                     for(String name:names[pageId]){
    107                         msgs.add(name);
    108                     }
    109                     adapter.notifyDataSetChanged();
    110                     listView.setLoadMoreSuccess();
    111                 }else{
    112                     listView.stopLoadMore();
    113                 }
    114             }
    115         }, 2 * 1000);
    116     }
    117 
    118     private class MyAdapter extends BaseAdapter{
    119         @Override
    120         public int getCount() {
    121             return msgs==null ? 0 : msgs.size();
    122         }
    123         @Override
    124         public Object getItem(int position) {
    125             return msgs.get(position);
    126         }
    127 
    128         @Override
    129         public long getItemId(int position) {
    130             return position;
    131         }
    132 
    133         @Override
    134         public View getView(int position, View convertView, ViewGroup parent) {
    135             TextView textView;
    136             if(convertView==null) {
    137                 textView = (TextView) getLayoutInflater().inflate(android.R.layout.simple_list_item_1, null);
    138             }else{
    139                 textView = (TextView) convertView;
    140             }
    141             textView.setText(msgs.get(position));
    142             return textView;
    143         }
    144     }
    145 }

    开源ListView自定义下载:http://download.csdn.net/detail/androidsj/7948481

  • 相关阅读:
    spring mvc给参数起别名
    聊聊分布式定时任务中间件架构及其实现--转
    Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构
    终端安全工具 gartner 排名
    When Cyber Security Meets Machine Learning 机器学习 安全分析 对于安全领域的总结很有用 看未来演进方向
    DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网
    DNS隧道之DNS2TCP使用心得教程——是可以用来穿透qiang的,ubuntu下直接apt install dns2tcp
    DNS隧道工具汇总——补充,还有IP over DNS的工具NSTX、Iodine、DNSCat
    Data Mining and Machine Learning in Cybersecurity PDF
    ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked
  • 原文地址:https://www.cnblogs.com/androidsj/p/3983469.html
Copyright © 2011-2022 走看看