【问题标题】:java.lang.IllegalStateException android.widget.ListView.layoutChildren crashjava.lang.IllegalStateException android.widget.ListView.layoutChildren 崩溃
【发布时间】:2017-08-03 07:40:52
【问题描述】:

我编辑了这张票。

我仍然在 prod 中看到那些崩溃。很少,但我想了解问题所在。

我在跟踪中没有数据可以表明它在我的代码中崩溃的位置。

我应该根据堆栈跟踪在我的代码中寻找什么?

我用谷歌搜索了 java.lang.IllegalStateException android.widget.ListView.layoutChildren 术语,我发现大多数 cmets 都与文档所说的 notifyDataSetChanged 相关:

通知附加的观察者底层数据已更改,任何反映数据集的视图都应自行刷新。

我正在使用大约 10 个列表视图。我即时添加项目,它们永远不会改变。如果他们这样做,我会清除列表并从头开始重建它。

这是堆栈跟踪:

三星 Galaxy S6 (),3072MB RAM,Android 7.0 报告第 1 个,共 6 个

java.lang.IllegalStateException: 
  at android.widget.ListView.layoutChildren (ListView.java:1747)
  at android.widget.AbsListView.onLayout (AbsListView.java:3008)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.widget.RelativeLayout.onLayout (RelativeLayout.java:1079)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.widget.RelativeLayout.onLayout (RelativeLayout.java:1079)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:261)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.support.v4.widget.DrawerLayout.onLayout (DrawerLayout.java:1197)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:261)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.support.v7.widget.ActionBarOverlayLayout.onLayout (ActionBarOverlayLayout.java:433)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:261)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1741)
  at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1585)
  at android.widget.LinearLayout.onLayout (LinearLayout.java:1494)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:261)
  at com.android.internal.policy.DecorView.onLayout (DecorView.java:887)
  at android.view.View.layout (View.java:18804)
  at android.view.ViewGroup.layout (ViewGroup.java:5951)
  at android.view.ViewRootImpl.performLayout (ViewRootImpl.java:2655)
  at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2371)
  at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1522)
  at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:7098)
  at android.view.Choreographer$CallbackRecord.run (Choreographer.java:927)
  at android.view.Choreographer.doCallbacks (Choreographer.java:702)
  at android.view.Choreographer.doFrame (Choreographer.java:638)
  at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:913)
  at android.os.Handler.handleCallback (Handler.java:751)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:154)
  at android.app.ActivityThread.main (ActivityThread.java:6682)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1520)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410)

【问题讨论】:

  • 放一些带问题的代码
  • 喜欢我所有的应用?你读过痕迹吗?
  • 您找到解决问题的方法了吗?我面临着完全相同的问题,但是如果没有堆栈跟踪中的任何类详细信息,很难找出代码的哪一部分导致了问题 - 它几乎与您的完全相同
  • 我摆脱了这个anr。我在 doinbackround 和发布中添加项目(onProgress...)

标签: android android-layout listview crash notifydatasetchanged


【解决方案1】:

你需要调用函数

mListAdapter.notifyDataSetChanged();

在从 ListView 中添加或删除之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多