为啥这个viewholder是空的?

Posted

技术标签:

【中文标题】为啥这个viewholder是空的?【英文标题】:Why this viewholder are null?为什么这个viewholder是空的? 【发布时间】:2021-06-13 07:25:31 【问题描述】:

我使用 ExpandableList 适配器,但我的应用程序被 NullPointerException 迷住了。我想知道是什么导致 viewHolder 设置不正确。

 @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
        ViewHolder vh;
        //Set up layout for ExpandableList
        if(groupPosition==0)
            convertView =LayoutInflater.from(context).inflate(R.layout.friends_list_title,null);
        else
            if(convertView==null)
                convertView= LayoutInflater.from(context).inflate(R.layout.friends_list_item,null);
                vh = new ViewHolder();
                vh.tv = (TextView) convertView.findViewById(R.id.group_tv);
                convertView.setTag(vh);
            
            vh = (ViewHolder) convertView.getTag();

            vh.tv.setText(group[groupPosition]);
        

        return convertView;
    

2021-03-12 14:17:38.006 8189-8189/com.example.myapplication E/androidRuntime: FATAL EXCEPTION: main 进程:com.example.myapplication,PID:8189 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)” 在 com.example.MyExpandableListAdapter.getGroupView(ExpamdListAdapter.java:81) 在 android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:446) 在 android.widget.AbsListView.obtainView(AbsListView.java:2387) 在 android.widget.ListView.makeAndAddView(ListView.java:2067) 在 android.widget.ListView.fillDown(ListView.java:793) 在 android.widget.ListView.fillFromTop(ListView.java:855) 在 android.widget.ListView.layoutChildren(ListView.java:1810) 在 android.widget.AbsListView.onLayout(AbsListView.java:2184) 在 android.view.View.layout(View.java:22844) 在 android.view.ViewGroup.layout(ViewGroup.java:6389) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829) 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673) 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1582) 在 android.view.View.layout(View.java:22844) 在 android.view.ViewGroup.layout(ViewGroup.java:6389) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:270) 在 android.view.View.layout(View.java:22844) 在 android.view.ViewGroup.layout(ViewGroup.java:6389) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829) 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673) 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1582) 在 android.view.View.layout(View.java:22844) 在 android.view.ViewGroup.layout(ViewGroup.java:6389) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:270) 在 android.view.View.layout(View.java:22844) 在 android.view.ViewGroup.layout(ViewGroup.java:6389) 在 androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:530) 在 android.view.View.layout(View.java:22844) 在 android.view.ViewGroup.layout(ViewGroup.java:6389) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:270) 在 android.view.View.layout(View.java:22844) 在 android.view.ViewGroup.layout(ViewGroup.java:6389) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829) 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673) 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1582) 在 android.view.View.layout(View.java:22844) 在 android.view.ViewGroup.layout(ViewGroup.java:6389) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:270) 在 com.android.internal.policy.DecorView.onLayout(DecorView.java:784) 在 android.view.View.layout(View.java:22844) 在 android.view.ViewGroup.layout(ViewGroup.java:6389) 在 android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3470) 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2938) 在 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1952) 在 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8171) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:972) 在 android.view.Choreographer.doCallbacks(Choreographer.java:796) 在 android.view.Choreographer.doFrame(Choreographer.java:731) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957) 在 android.os.Handler.handleCallback(Handler.java:938) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2021-03-12 14:17:40.138 8189-8189/? I/Process:发送信号。 PID:8189 SIG:9

【问题讨论】:

(ViewHolder) convertView.getTag();使用前需要先初始化ViewHolder。 你好,可以发一下friends_list_item.xml文件吗? 【参考方案1】:

您忘记将父级传递给布局充气机。将布局充气器线更改为该线

convertView = LayoutInflater.from(context).inflate(R.layout.item_spinner, parent, false);

【讨论】:

以上是关于为啥这个viewholder是空的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 FormData 是空的? [复制]

为啥Linux中的sudoers文件用iv打开是空的?

为啥我的 $_ENV 是空的?

mybatis为啥执行select语句是,返回的结果都是空的

PHP 打印布尔值是空的,为啥?

java问题:为啥这个list里面的实体类都是空的,但是实体类里面有值,dao层采用mybatis