先看这段代码,思路是:从Edittext中得到字符,然后构造成实体类,再传递给ArraryList的add
button_send_TextContent.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
UserTallGalleryBean test = new UserTallGalleryBean();
test.setSendContent(sendTextContainter.getText());
test.setUserId(10905512);
adapter.addDataListItem(test);
}
});
//添加数据
public void addDataListItem(UserTallGalleryBean bean){
if(datalist!=null)datalist.add(bean);
Iterator<UserTallGalleryBean> iterator = datalist.iterator();
while(iterator.hasNext()){
Log.i("face", "--->>>"+(iterator.next()).getSendContent());
}
//this.notifyDataSetChanged();
}
最后发现ArrayList的数据都一样了,毋庸置疑,引用问题,引用好比指针,都是一一对应的,但一看觉得我的代码没有问题啊,UserTallGalleryBean都是new后才用的,所以引用都是不一样的,刚开始我也是这么觉得的,所以我重写了UserTallGallery的toString(),在构造器里给toString付动态的数据(即每个new 后都有不同的toString,让后我们打印UserTallGalleryBean的对象就可以知道是不是同一个引用了,当然,你也可以直接用hashcode),最后还是发现addDataListItem是不同的引用,下面再看看修改后的
button_send_TextContent.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
UserTallGalleryBean test = new UserTallGalleryBean();
test.setSendContent(sendTextContainter.getText().toString());
test.setUserId(10905512);
adapter.addDataListItem(test);
}
});
//添加数据
public void addDataListItem(UserTallGalleryBean bean){
if(datalist!=null)datalist.add(bean);
Iterator<UserTallGalleryBean> iterator = datalist.iterator();
while(iterator.hasNext()){
Log.i("face", "--->>>"+(iterator.next()).getSendContent());
}
//this.notifyDataSetChanged();
}
sendTextContainter.getText().toString()
UserTallGalleryBean的setSendContent的数据都是同一个引用,所以打印出来的数据都是一样的,而不是UserTallGalleryBean的问题,还有但当
sendTextContainter这个edittext再次被getstring()时,ArrayList的数据还是会改变的(没有用tostring情况下),所以会造成button_send_TextContent.setOnClickListener事件还没发生,arraylist的数据就已经被覆盖了,那么官方为啥在edittext的gettext中得到同一个对象呢?呵呵,想想如果得到的是不同对象的引用,那得消耗多少内存