【问题标题】:Solution for adapter when data wait to load数据等待加载时适配器的解决方案
【发布时间】:2016-04-05 11:13:10
【问题描述】:

我的ListView中的项目需要时间来加载,所以我创建线程来加载它们,从而使加载操作异步。我在列表中有 10 项。第 10 项可以加载,但第 9 项正在加载中。

我用 ArrayList 制作了一个自定义 Adapter,用 10 个元素初始化(数据为空)。

getView() 函数中,我检查它是否正在加载 (data empty) 我返回 null,并在加载项目时通知。

但它在ListViewonLayout函数中报告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


【解决方案1】:

您可以创建另一个包含文本的视图(正在加载...)或使用现有的 convertView(稍作更改,例如设置文本加载...或用户可以理解该项目正在加载中的内容)

    if(model.getId()==null){
    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    loadingView= inflater.inflate(R.layout.custom_row_branch_location,parent,false);

    return loadingView;        
    }

并在完成加载原始项目的背景过程时设置此逻辑,然后 loadingView 将被替换...并通知

【讨论】:

  • 嗨,我使用 VISIBLE and GONE。如果数据空视图已消失。但是底部的列表视图很长而且很灰。
  • 使用 Visible and gone 可能不适合这种场景
  • 对不起,我认为您的解决方案很好。但在我的情况下 ListView 是固定的标题。
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
相关资源
最近更新 更多