您的位置:首页 > 其它

下拉加载数据 模拟 小实例

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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: