下拉加载数据 模拟 小实例

来源:互联网 发布:vmware esxi mac os 编辑:程序博客网 时间:2024/06/08 08:37

 

product_item_layout.xml

  <TextView       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="New Text"       android:id="@+id/textView2_name" />    <TextView       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="New Text"       android:id="@+id/textView3_price" /></LinearLayout>


 

 

 

——————————————————————————————————————————————

 

布局文件loading.xml

 

 

 <ProgressBar       style="?android:attr/progressBarStyle"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_marginRight="10dp"       android:id="@+id/progressBar" />     <TextView       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="正在玩命加载中..."       android:id="@+id/textView2" /></LinearLayout>

 

 

————————————————————————————————————————————————

 

 

创建product类

 

public class Product {   private String name;   private float price;    public String getName() {       return name;    }    public void setName(String name) {       this.name = name;    }    public float getPrice() {       return price;    }    public void setPrice(float price) {       this.price = price;    }} 


 

 

Main6Activityd代码:

 

public class Main6Activity extendsAppCompatActivity implements AbsListView.OnScrollListener{    private ListView listView_product;   private Vector<Product> products = new Vector<>();   private ProductAdapter pa;   @Override   protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.activity_main6);       listView_product = (ListView) findViewById(R.id.listView_product);       listView_product.setOnScrollListener(this);       //给ListView添加底部视图       View footerView =LayoutInflater.from(this).inflate(R.layout.loading,null);       listView_product.addFooterView(footerView);        initData();       pa = new ProductAdapter(this,products);       listView_product.setAdapter(pa);    }    private int count = 1;//用于产品记数器   //初始化数据   private void initData(){       for (int i=0;i<10;i++){           Product p = new Product();           p.setName("product name "+count);           p.setPrice(10+count);            count++;           products.add(p);       }    }    private int visibleLastIndex = 0; //在界面上可见的最后一个选项   @Override   public void onScrollStateChanged(AbsListView view, int scrollState) {        if(scrollState== AbsListView.OnScrollListener.SCROLL_STATE_IDLE                &&visibleLastIndex==pa.getCount()){           System.out.println(visibleLastIndex);           System.out.println(pa.getCount());           new Thread(new LoadDataThread()).start();       }    }   @Override    public void onScroll(AbsListView view, intfirstVisibleItem, int visibleItemCount, int totalItemCount) {       visibleLastIndex = firstVisibleItem+visibleItemCount-1;    }    private static final int UPDATE_DATA = 0x1; //更新数据的标记    //消息处理器   private Handler handler = new Handler(){       @Override       public void handleMessage(Message msg) {           switch (msg.what){ //子线程中发送消息使用的标记就是用what属性存储                case UPDATE_DATA:                   //通知适配器数据集已经发生变化,那么ListView会重新加载数据                    pa.notifyDataSetChanged();                    break;           }       }   };    /**    * 模拟异步加载数据的线程    */   class LoadDataThread implements Runnable{       @Override        public void run() {           initData();           try {                Thread.sleep(1000);           } catch (InterruptedException e) {                e.printStackTrace();           }           //消息对象就是一个Message对象           //发送一个空消息(空消息不是指消息对象是空,而是指消息对象只有一个标记,没有其它数据)           handler.sendEmptyMessage(UPDATE_DATA);       }    }    /**    * 产品列表适配器    */   private static class ProductAdapter extends BaseAdapter{       private Context context;       private Vector<Product> products;       public ProductAdapter(Context context,Vector<Product> products){           this.context = context;           this.products = products;       }       @Override       public int getCount() {           return products.size();       }        @Override       public Object getItem(int position) {           return products.get(position);       }        @Override       public long getItemId(int position) {           return position;       }        @Override        public View getView(int position, ViewconvertView, ViewGroup parent) {           if(convertView==null){                convertView =LayoutInflater.from(context).inflate(R.layout.product_item_layout,null);           }           TextView tv_name = (TextView)ViewHolder.getView(convertView,R.id.textView2_name);           TextView tv_price = (TextView)ViewHolder.getView(convertView,R.id.textView3_price);           Product p = products.get(position);           tv_name.setText(p.getName());            tv_price.setText(String.valueOf(p.getPrice()));           return convertView;       }    }}


0 0
原创粉丝点击