【发布时间】:2016-04-05 11:13:10
【问题描述】:
我的ListView中的项目需要时间来加载,所以我创建线程来加载它们,从而使加载操作异步。我在列表中有 10 项。第 10 项可以加载,但第 9 项正在加载中。
我用 ArrayList 制作了一个自定义 Adapter,用 10 个元素初始化(数据为空)。
在 getView() 函数中,我检查它是否正在加载 (data empty) 我返回 null,并在加载项目时通知。
但它在ListView的onLayout函数中报告exception。
请帮我解决这个问题。
更新:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Item model = arrayList.get(position / 3);
if(model.getId()==null) return null;
if (convertView == null || convertView.getTag() == null || ! (convertView.getTag() instanceof ViewHolderHeader)) {
.......
}
......
}
更新日志文件:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.ViewGroup$LayoutParams android.view.View.getLayoutParams()' on a null object reference
at com.packed.customviews.LoadMoreListView.createPinnedShadow(LoadMoreListView.java:269)
at com.packed.customviews.LoadMoreListView.ensureShadowForPosition(LoadMoreListView.java:325)
at com.packed.customviews.LoadMoreListView$2.onScroll(LoadMoreListView.java:160)
at android.widget.AbsListView.invokeOnItemScrollListener(AbsListView.java:1938)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:7065)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:6484)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreographer.doFrame(Choreographer.java:559)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
【问题讨论】:
-
请显示完整的堆栈跟踪以及一些代码
-
嗨,我的代码很简单。在 getView() 中,我首先检查 getItem(position) 是否为空 getView 将返回 null(不是布局)。
-
显示你的简单代码
-
您不能只在
getView()中返回 null。这就是导致异常的原因。您必须为尚未加载的项目显示占位符View,或者在您的Adapter中根本不处理它们,直到它们被加载。如此简短的回答:永远不要在getView()中返回 null -
显示你的堆栈 trce..
标签: android listview exception asynchronous