private ArrayList<Image> G_imagelist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image_gallery);
this.context = this;
G_imagelist = new ArrayList<Image>();
// bindData
new bindData().execute();
}
private final Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
int state = msg.getData().getInt("state");
switch (state) {
case FINISH:
ArrayList<ImageList> templist = msg.getData()
.getParcelableArrayList("list");
for(Image image : templist) {
G_imagelist.add(image);
}
if (adapter == null) {
adapter = new Gallery_Adapter(context, 0, G_imagelist);
// set adapter
gallery.setAdapter(adapter);
} else {
adapter.notifyDataSetChanged();//
}
break;
}
super.handleMessage(msg);
}
};
根据http://stackoverflow.com/questions/3669325/notifydatasetchanged-example/5092426#5092426中的回答得到了解决方法,通过一个成员集合的活动去告诉ArrayAdapter数据的更改,而不是局部的集合,即templist,应该使用全局的集合G_imagelist。 问题得到解决,到翻页时position不会因此重置为0,而是继续叠加,即第十一张的positon值为10,以此类推。
当然,楼顶的代码也不是不可行的,可以使用局部的集合来进行通知adapter,解决方法如下:
private final Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
int state = msg.getData().getInt("state");
switch (state) {
case FINISH:
ArrayList<ImageList> templist = msg.getData()
.getParcelableArrayList("list");
if (templist.size() < load_count) {
loadMore = false;
}
if (adapter == null) {
adapter = new Gallery_Adapter(context, 0, templist);
// set adapter
gallery.setAdapter(adapter);
} else {
//一条条往adapter的集合中添加翻页查询后的数据
for (Image image : templist) {
adapter.add(image);
}
adapter.notifyDataSetChanged();//
}
break;
}
super.handleMessage(msg);
}
};
Gallery使用此种方法不知有没什么瑕疵。 Google里搜出很多ListView使用这种方法改变数据后在一些事件中得不到后面更新列表的数据,没研究过不清楚。
Your choices are:
Use the functions of the ArrayAdapter to modify the underlying List (add, insert, remove, clear, etc.)
Re-create the ArrayAdapter with the new List data.
Create your own class derived from BaseAdapter and ListAdapter that allows changing of the underlying List data structure.
Then notifyDataSetChanged will work.
根据这里的说法应该还有其它方法可以实现翻页的功能,不过暂不深究咯,完成功能交差先= = 拖了好多天。