【问题标题】:Listview with TitlepageIndicator Strage indexoutofbound exceptionListview 与 TitlepageIndicator Strage indexoutofbound 异常
【发布时间】:2013-07-31 20:26:41
【问题描述】:

我的视图寻呼机中有列表视图,并且我使用了 TitlePageIndicator。一切似乎都运行良好,但由于 IndexOutOfBound 异常而随机崩溃。我不确定是什么原因造成的。下面我附上了它的堆栈跟踪。我还发现this link 并提到这已在 2.1.0 中修复。但是我用的是2.3.1版本。

`

> 07-31 15:32:10.242: W/System.err(6720): java.lang.IndexOutOfBoundsException: Invalid index 4, size is 1
07-31 15:32:10.247: W/System.err(6720):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
07-31 15:32:10.247: W/System.err(6720):     at java.util.ArrayList.get(ArrayList.java:304)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.AbsListView.obtainView(AbsListView.java:2452)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.ListView.makeAndAddView(ListView.java:1775)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.ListView.fillDown(ListView.java:678)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.ListView.fillSpecific(ListView.java:1336)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.ListView.layoutChildren(ListView.java:1606)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.AbsListView.onLayout(AbsListView.java:2303)
07-31 15:32:10.247: W/System.err(6720):     at android.view.View.layout(View.java:14063)
07-31 15:32:10.247: W/System.err(6720):     at android.view.ViewGroup.layout(ViewGroup.java:4655)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
07-31 15:32:10.247: W/System.err(6720):     at android.view.View.layout(View.java:14063)
07-31 15:32:10.247: W/System.err(6720):     at android.view.ViewGroup.layout(ViewGroup.java:4655)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-31 15:32:10.247: W/System.err(6720):     at android.view.View.layout(View.java:14063)
07-31 15:32:10.247: W/System.err(6720):     at android.view.ViewGroup.layout(ViewGroup.java:4655)
07-31 15:32:10.247: W/System.err(6720):     at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1520)
07-31 15:32:10.247: W/System.err(6720):     at android.view.View.layout(View.java:14063)
07-31 15:32:10.247: W/System.err(6720):     at android.view.ViewGroup.layout(ViewGroup.java:4655)
07-31 15:32:10.247: W/System.err(6720):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
07-31 15:32:10.252: W/System.err(6720):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
07-31 15:32:10.252: W/System.err(6720):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
07-31 15:32:10.252: W/System.err(6720):     at android.view.View.layout(View.java:14063)
07-31 15:32:10.252: W/System.err(6720):     at android.view.ViewGroup.layout(ViewGroup.java:4655)
07-31 15:32:10.252: W/System.err(6720):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-31 15:32:10.252: W/System.err(6720):     at android.view.View.layout(View.java:14063)
07-31 15:32:10.252: W/System.err(6720):     at android.view.ViewGroup.layout(ViewGroup.java:4655)
07-31 15:32:10.252: W/System.err(6720):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
07-31 15:32:10.252: W/System.err(6720):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
07-31 15:32:10.257: W/System.err(6720):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
07-31 15:32:10.257: W/System.err(6720):     at android.view.View.layout(View.java:14063)
07-31 15:32:10.257: W/System.err(6720):     at android.view.ViewGroup.layout(ViewGroup.java:4655)
07-31 15:32:10.257: W/System.err(6720):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-31 15:32:10.257: W/System.err(6720):     at android.view.View.layout(View.java:14063)
07-31 15:32:10.257: W/System.err(6720):     at android.view.ViewGroup.layout(ViewGroup.java:4655)
07-31 15:32:10.257: W/System.err(6720):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2017)
07-31 15:32:10.257: W/System.err(6720):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1838)
07-31 15:32:10.257: W/System.err(6720):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1131)
07-31 15:32:10.257: W/System.err(6720):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4611)
07-31 15:32:10.257: W/System.err(6720):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
07-31 15:32:10.257: W/System.err(6720):     at android.view.Choreographer.doCallbacks(Choreographer.java:555)
07-31 15:32:10.257: W/System.err(6720):     at android.view.Choreographer.doFrame(Choreographer.java:525)
07-31 15:32:10.257: W/System.err(6720):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
07-31 15:32:10.257: W/System.err(6720):     at android.os.Handler.handleCallback(Handler.java:615)
07-31 15:32:10.257: W/System.err(6720):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-31 15:32:10.257: W/System.err(6720):     at android.os.Looper.loop(Looper.java:137)
07-31 15:32:10.257: W/System.err(6720):     at android.app.ActivityThread.main(ActivityThread.java:4898)
07-31 15:32:10.257: W/System.err(6720):     at java.lang.reflect.Method.invokeNative(Native Method)
07-31 15:32:10.257: W/System.err(6720):     at java.lang.reflect.Method.invoke(Method.java:511)
07-31 15:32:10.257: W/System.err(6720):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
07-31 15:32:10.257: W/System.err(6720):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
07-31 15:32:10.257: W/System.err(6720):     at dalvik.system.NativeStart.main(Native Method)

`

【问题讨论】:

  • 在你认为可能出错的地方放几行代码。
  • @Nizam 我们可以在这里聊聊吗?
  • 您的 ListView 上是否定义了任何页眉或页脚 - 由 addHeaderView() 或 addFooterView() 添加?
  • @talkol 是的,我有。
  • 你在用 HeaderViewListAdapter 做什么?您是否正在删除另一个线程上的元素并尝试从 arraylist 重新填充列表?

标签: android listview indexoutofboundsexception


【解决方案1】:

我刚刚解决了与您的问题类似的问题。就我而言,这是因为我在 asynctask 运行之前清除了我的数组列表。所以我说的是当我滚动列表视图时,我的数组列表是空的,为了让适配器知道数组列表已更改并且为空,我必须先通知它。


arraylistTimeline.clear(); adapterTimeline.notifyDataSetChanged();

TimelineRestoURL tURL = new TimelineRestoURL(); tURL.execute();


就这样。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    如果不看一些代码,很难确定您的确切问题,但让我尝试一个有根据的猜测。

    您是否有可能通过在 ListView 上手动调用 getAdapter() 来访问您的适配器?

    如果是这样,当您最初设置适配器时,不要调用getAdapter(),而是在新的类变量中保留对它的引用。然后,当您需要它时,使用您的新变量访问它。

    【讨论】:

    • 嗨,是的,我在列表视图中添加了页脚,当绘制列表视图的第一个元素时,我将调用 getAdapter 以获取列表视图最后一项的确切高度。
    • 您是否尝试避免使用我的建议调用 getAdapter()?关于页脚,您是在设置适配器之前还是之后设置的?尝试在之前/之后移动它,因为我知道它会导致奇怪的怪癖所以尝试两种方式..
    • 当然。我会尝试。我认为这个问题的主要原因是我试图从后台更新列表视图。我想和你讨论这个问题。你能帮忙吗?
    • hmm.. 我认为从后台运行会给你一个不同的例外。无论如何,尝试使用 runOnUiThread() 运行您的后台代码,以确保它在 UI 线程上运行
    • 您好,感谢您的支持。拥有页脚视图导致了这个问题。而且我一直在修改 asynctask 的后台方法上的 arraylist 并在 postexecute 时通知适配器。这也是导致此问题的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2015-12-05
    相关资源
    最近更新 更多