我得到一个带有自定义适配器的ListView。在适配器中,布局是从xml中膨胀出来的。
一切正常,我可以看到项目,直到屏幕方向改变。我知道活动被重新创建(或恢复),ListView也被重新创建,以及适配器。但现在ListView中没有项目。适配器不是空的,我使用toast来显示适配器中的项目计数。
我猜有一个膨胀的问题,因为如果我使用相同的适配器(或具有相同数据的适配器)到一个新的ListView,也没有显示任何东西。但最疯狂的事情我不明白的是,如果我让我的getView()方法返回一个简单的TextView,所有的工作都很好,即使在方向改变后。
我尝试了一些事情,比如不要回收视图,这样它每次都会膨胀,或者将视图保存到匹配的项目(从适配器的getItem(position))。
我很感激所有的提示:)
编辑:所以我被要求提供一些代码。
这是我的Adaptar
的getView() @Override
public View getView(final int position, View convertView,
ViewGroup parent) {
View view = convertView;
final Event event = getItem(position);
if (view == null) {
view = inflater.inflate(R.layout.new_event_item_layout, parent,
false);
view.setTag(R.id.eventDate, view.findViewById(R.id.eventDate));
view.setTag(R.id.eventTime, view.findViewById(R.id.eventTime));
view.setTag(R.id.eventName, view.findViewById(R.id.eventName));
view.setTag(R.id.eventBemerkungen,
view.findViewById(R.id.eventBemerkungen));
view.setTag(R.id.eventIcon, view.findViewById(R.id.eventIcon));
}
((TextView) view.getTag(R.id.eventDate)).setText(event.getDate());
((TextView) view.getTag(R.id.eventTime)).setText(event.getName());
((TextView) view.getTag(R.id.eventName)).setText(event.getTime());
((TextView) view.getTag(R.id.eventBemerkungen)).setText(event
.getDescription());
SquaredImageView icon = (SquaredImageView) view.getTag(R.id.eventIcon);
Picasso.with(context).load(event.getUri())
.placeholder(R.drawable.ic_reload).into(icon);
view.setBackgroundColor(event.getBackgroundColor());
view.setVisibility(View.VISIBLE);
return view;
//return getDummyTextView();
}
public TextView getDummyTextView()
{
TextView tv=new TextView(context);
tv.setText("YOLO BIATCHSES");
tv.setTextColor(Color.WHITE);
return tv;
}
我也遇到了同样的问题,虽然这不是因为方向的变化,我找到了解决方案,只是在活动的娱乐或任何情况下你有再次设置listView.setAdapter(adapter)
。我怀疑listview基本上失去了指向适配器的指针。