下拉加载数据 模拟 小实例
2016-07-22 15:32
183 查看
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; } } }
相关文章推荐
- Spring BeanNameAutoProxyCreator 与 ProxyFactoryBean区别
- 让PHP7达到最高性能的几个Tips
- 修改Oracle10g的默认8080端口
- Codeforces Round #324 (Div. 2) (B排列组合)(C贪心)(D哥德巴赫猜想 数论+暴力)
- memcache搜索分页
- Android 接口使用
- Android studio修改包名
- 红帽6 RHCE&RHCS认证培训笔记(3)
- Filter体现职责链模式
- Qt之资源系统
- WebApplicationInitializer (spring 3.x.x以上版本)
- 原码、反码、补码
- Qt之资源系统
- 使用 logback + slf4j 进行日志记录
- Qt之资源系统
- jvm 监控
- javascript Date format(js日期格式化)
- 自带bfs输出最短步数的迷宫
- 机器工作调度
- python文件路径