/** $filename: ListAdapter.java,v $
* $Date: 2014-9-19 $
* Copyright (C) ZhengHaibo, Inc. All rights reserved.
* This software is Made by Zhenghaibo.*/package net.mobctrl.listviewdemo;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ProgressBar;/**@author: ZhengHaibo
*blog:http://blog.csdn.net/nuptboyzhb*mail: zhb931706659@126.com
*web:http://www.mobctrl.net*2014-9-19 Nanjing,njupt,China*/
public classListAdapter extends BaseAdapter {private Listdatas;privateContext context;privateUpdateCallback updateCallback;publicUpdateCallback getUpdateCallback() {returnupdateCallback;
}public voidsetUpdateCallback(UpdateCallback updateCallback) {this.updateCallback =updateCallback;
}publicListAdapter(Context context) {
datas= new ArrayList();this.context =context;
}public voidaddData(Model model) {
datas.add(model);
notifyDataSetChanged();
}
@Overridepublic intgetCount() {//TODO Auto-generated method stub
returndatas.size();
}
@Overridepublic Object getItem(intpos) {//TODO Auto-generated method stub
return datas.get(pos);
}
@Overridepublic long getItemId(intarg0) {//TODO Auto-generated method stub
return 0;
}
@Overridepublic View getView(final intpos, View convertView, ViewGroup viewGroup) {
final Model model= datas.get(pos);
ViewHolder viewHolder= null;if (null ==convertView) {
viewHolder= newViewHolder();
convertView= LayoutInflater.from(context).inflate(
R.layout.list_item_layout,null);
viewHolder.pb=(ProgressBar) convertView
.findViewById(R.id.pb_show);
viewHolder.btn=(Button) convertView.findViewById(R.id.btn);
convertView.setTag(viewHolder);
}else{
viewHolder=(ViewHolder) convertView.getTag();
convertView.setTag(viewHolder);
}
viewHolder.btn.setText(model.getName());
viewHolder.btn.setOnClickListener(newOnClickListener() {
@Overridepublic voidonClick(View v) {if(null !=updateCallback){
updateCallback.startProgress(model,pos);
}
}
});
viewHolder.pb.setProgress(0);//cache the view
returnconvertView;
}public static classViewHolder {
ProgressBar pb;
Button btn;
}
}Activity?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80package net.mobctrl.listviewdemo;
import net.mobctrl.listviewdemo.ListAdapter.ViewHolder;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;
import android.app.Activity;
import android.view.View;
import android.widget.ListView;/**
* @author 郑海波
* @websethttp://www.mobctrl.net* ListView的局部刷新*/@EActivity(R.layout.activity_main)public classMainActivity extends Activity implements UpdateCallback{
@ViewById
ListView listview;privateListAdapter adapter;
@AfterViewsvoidafterViews() {
adapter= new ListAdapter(this);
adapter.setUpdateCallback(this);
listview.setAdapter(adapter);
initDatas();
}private voidinitDatas() {for(int i = 0;i<100;i++){
Model model= new Model(i, -->);
adapter.addData(model);
}
}
@Overridepublic void startProgress(final Model model,final intposition) {/** start the Thread to update the Progress*/
new Thread(newRunnable() {
@Overridepublic voidrun() {for(int i = 0;i<=100;i++){
updateProgressInUiThread(model, i,position);try{
Thread.sleep(50);
}catch(InterruptedException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
@UiThreadvoid updateProgressInUiThread(Model model,int progress,intposition){
updateProgressPartly(progress,position);
}private void updateProgressPartly(int progress,intposition){int firstVisiblePosition =listview.getFirstVisiblePosition();int lastVisiblePosition =listview.getLastVisiblePosition();if(position>=firstVisiblePosition && position<=lastVisiblePosition){
View view= listview.getChildAt(position -firstVisiblePosition);if(view.getTag() instanceof ViewHolder){
ViewHolder vh=(ViewHolder)view.getTag();
vh.pb.setProgress(progress);
}
}
}
}