ListView是空的/在方向改变后消失,即使适配器包含项目



我得到一个带有自定义适配器的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基本上失去了指向适配器的指针。

最新更新