Java 更改方向后,即使适配器包含项,ListView也为空/不显示

Java 更改方向后,即使适配器包含项,ListView也为空/不显示,java,android,xml,Java,Android,Xml,我得到了一个带有自定义适配器的ListView。 在适配器中,从xml扩展布局 一切都很好,我可以看到项目,直到屏幕方向改变。 我知道活动会被重新创建(或恢复),ListView和适配器也会被重新创建。 但是现在ListView中没有任何项。适配器不是空的,我使用toasts来显示适配器中的项目数 我想这是一个膨胀的问题,因为如果我对一个新的ListView使用相同的适配器(或具有相同数据的适配器),那么也不会显示任何内容。 但我不明白的最疯狂的事情是,如果我让getView()方法返回一个简单

我得到了一个带有自定义适配器的ListView。 在适配器中,从xml扩展布局

一切都很好,我可以看到项目,直到屏幕方向改变。 我知道活动会被重新创建(或恢复),ListView和适配器也会被重新创建。 但是现在ListView中没有任何项。适配器不是空的,我使用toasts来显示适配器中的项目数

我想这是一个膨胀的问题,因为如果我对一个新的ListView使用相同的适配器(或具有相同数据的适配器),那么也不会显示任何内容。 但我不明白的最疯狂的事情是,如果我让getView()方法返回一个简单的TextView,即使在方向改变之后,一切都可以正常工作

我尝试了几种方法,比如不要循环使用视图,使其每次都膨胀,或者将视图保存到匹配的项目(从适配器的getItem(position))中

我非常感谢所有提示:)

编辑:所以有人问我一些代码

这是我的Adapter的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;
    }

您正在丢失列表项,因为android在方向更改期间的默认行为是销毁您的活动并重新创建它。选择此行为是为了使android能够使用新布局重新创建活动,该布局可能特别用于新方向

为了防止列表项消失,必须做几件事。在方向更改期间,第一件有帮助的事情是在更改后简单地重用相同的活动。这可以通过在清单中添加此行来完成:

android:configChanges="keyboardHidden|orientation"

它将传递给onConfigurationChanged()方法,如果不提供它,它只会重新测量布局,在大多数情况下,这似乎是处理旋转的一种非常合适的方法。

我也遇到了同样的问题,尽管这不是因为方向改变,我只是在重新创建活动或任何情况后再次设置
listView.setAdapter(adapter)
,找到了解决方法。我怀疑listview基本上丢失了指向适配器的指针。

发布代码和日志这不起作用。但是我不确定你是否读过我的帖子:我说我知道它已经被重新创建了。这不是问题,因为所有的东西都被重新创建了,所以我的适配器包含了项目,而包含ListView的活动布局也再次膨胀,但由于一些未知的原因,它是不可见的。所以我做了一些研究,现在我使用的是android:configChanges=“orientation | screenSize | keyboardHidden”它可以工作,所以我会接受你的答案,但最终我不明白为什么这会工作。。。