0

我有这个问题一个多星期了,在这里和谷歌上经历了几十个主题之后,我仍然没有答案。问题是我将数据动态加载到长 ListView,因此初始化不会持续很长时间。更改手机方向后,ListView 正在调整大小并且内部有空元素(没关系)。所以我认为 OnConfigurationChanged 事件会处理这个问题。不幸的是,它在调整大小之前被解雇了,所以我仍然有空列表。这是我的问题:在调整和绘制 widged 之后,是否无论如何都会获得一个事件(或侦听器)?

我已经在清单中:

android:configChanges="keyboardHidden|orientation|screenSize

并且没有办法将其“关闭”,因为加载需要几秒钟,而且我不想在调整手机方向时有几秒钟的延迟。

PS抱歉有任何语言错误;)

4

1 回答 1

0

是的。您可以使用 setOnGlobalLayoutListener() 来侦听,并在布局完成后使用回调

同样在屏幕旋转时,活动应该被销毁,重新创建,所以你的加载应该重新开始。你在做一些奇怪的事情吗?

我在我的片段之一中这样做:

root = inflater.inflate(R.layout.fragment_booking_accepted, null);
    root.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Dbg.e(TAG, "- On Layout Completed ! ");
                    // If you need this to be called again, then run again addOnGlobalLayoutListener.
                    // root.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    isLayoutCompleted = true;
                    // YOU write here all the coed you might need. }}}} close brackets

编辑 :

  1. 大多数人认为不让 android 完成它的工作是很可怕的:当屏幕旋转时销毁并重新创建。但你可以做你想做的。
  2. 加载一个空的列表视图非常轻量。加载布局需要几秒钟是不可能的。您必须使用微调器加载布局和列表视图,让用户知道他的手机在做什么(加载)。加载数据后,将数据更改通知适配器。

它会改变你的观点吗?问我,如果我知道,我会尽力回答。

于 2013-11-08T13:03:06.047 回答