为啥这个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是空的?的主要内容,如果未能解决你的问题,请参考以下文章