Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ExpandableListView中的Wierd NullPointer异常_Java_Android_Expandablelistview_Expandablelistadapter - Fatal编程技术网

Java ExpandableListView中的Wierd NullPointer异常

Java ExpandableListView中的Wierd NullPointer异常,java,android,expandablelistview,expandablelistadapter,Java,Android,Expandablelistview,Expandablelistadapter,因此,我使用以下适配器制作了一个可扩展的listView: class SubcategoriesAdapter extends BaseExpandableListAdapter { @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { View v=co

因此,我使用以下适配器制作了一个可扩展的listView:

class SubcategoriesAdapter extends BaseExpandableListAdapter {
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        View v=convertView;
        if(v==null) v=layoutInflater.inflate(R.layout.tip_view, null, false);
        ((TextView)v.findViewById(R.id.title)).setText(data.subcategories.get(groupPosition).tips.get(childPosition).title);
        ((TextView)v.findViewById(R.id.content)).setText(data.subcategories.get(groupPosition).tips.get(childPosition).text);
        return v;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    @Override
    public int getGroupCount() {
        return data.subcategories.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
       return data.subcategories.get(groupPosition).tips.size();
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return data.subcategories.get(groupPosition).tips.get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return 0;
    }

    @Override
    public Object getGroup(int groupPosition) {
       return data.subcategories.get(groupPosition);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        View v=convertView;
        Tips.TipsSubcategory me=data.subcategories.get(groupPosition);

       if(v==null) v=LayoutInflater.from(getContext()).inflate(R.layout.tips_subcategory_view, null, false);
       /* ((TextView)v.findViewById(R.id.title)).setText(me.title);
        Picasso.with(getActivity()).load(me.ad_url).into(((ImageView) v.findViewById(R.id.adImageView)));
        Picasso.with(getActivity()).load(me.image_url).into((ImageView)v.findViewById(R.id.image)); */
        return v;
    }
}
当我加载这个包含列表的片段时,我得到以下异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:715)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
    at biz.energit.cookingfridge.user.fragments.TipsCategory$SubcategoriesAdapter.getGroupView(TipsCategory.java:148)
它指向的这条线,148是我膨胀视图的那条线:

if(v==null) v=LayoutInflater.from(getContext()).inflate(R.layout.tips_subcategory_view, null, false);
我尝试移除
I
,传递实际的父对象而不是
null
,并从碎片或通过其他方式获取充气器。我不懂

更新:为了防止有人再次遇到这个问题,我不能写一个答案,因为有人将其标记为重复。 问题是使用

  • 您还没有包括适配器构造函数,您将通过它将活动/片段上下文传递给适配器,并且在getGroupView()和getChildView()方法中膨胀视图时将使用相同的上下文。 请包括在内
    让我为您提供我的工作代码片段

     public class AccordionAdapter extends BaseExpandableListAdapter {
    
        private Context mContext = null;
        private LayoutInflater mInflater = null;
        private ArrayList<SearchBean> mDataList = null;
    
        public AccordionAdapter(Context iContext, ArrayList<SearchBean> iDataList) {
        mContext = iContext;
        mInflater = LayoutInflater.from(mContext);
        mDataList = iDataList;
        }
    
        @Override
        public Object getChild(int arg0, int arg1) {
        return mDataList.get(arg0).getmChilds().get(arg1);
        }
    
        @Override
        public long getChildId(int groupPosition, int childPosition) {
    
        return childPosition;
        }
    
        @Override
        public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        ViewHolder holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.new_child_item, null);
        holder.mTextView = (TextView) convertView
            .findViewById(R.id.new_child_itemtxv);
    
        holder.mTextView
            .setText(mDataList.get(groupPosition).getmChilds()
                .get(childPosition)[0]
                + " - "
                + mDataList.get(groupPosition).getmChilds()
                    .get(childPosition)[1]);
        return convertView;
        }
    
        @Override
        public int getChildrenCount(int groupPosition) {
    
        return mDataList.get(groupPosition).getmChilds().size();
        }
    
        @Override
        public Object getGroup(int groupPosition) {
    
        return mDataList.get(groupPosition);
        }
    
        @Override
        public int getGroupCount() {
    
        return mDataList.size();
        }
    
        @Override
        public long getGroupId(int groupPosition) {
    
        return groupPosition;
        }
    
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        ViewHolder holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.new_group_item, null);
        holder.mTextView = (TextView) convertView
            .findViewById(R.id.new_grp_itemtxv);
        holder.mTextView.setText(mDataList.get(groupPosition).getmGroup());
        return convertView;
        }
    
        @Override
        public boolean hasStableIds() {
    
        return true;
        }
    
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
    
        return true;
        }
    
        // Data part
        class ViewHolder {
        private TextView mTextView = null;
        }
    }
    
    公共类AccordionAdapter扩展了BaseExpandableListAdapter{
    私有上下文mContext=null;
    私有LayoutInflater mInflater=null;
    private ArrayList mDataList=null;
    公共手风琴适配器(上下文iContext,数组列表iDataList){
    mContext=iContext;
    mInflater=LayoutInflater.from(mContext);
    mDataList=iDataList;
    }
    @凌驾
    公共对象getChild(int arg0,int arg1){
    返回mDataList.get(arg0.getmChilds().get(arg1);
    }
    @凌驾
    公共长getChildId(int-groupPosition,int-childPosition){
    返回子位置;
    }
    @凌驾
    公共视图getChildView(int-groupPosition、int-childPosition、,
    布尔值isLastChild、视图转换视图、视图组父级){
    ViewHolder=新的ViewHolder();
    convertView=mInflater.充气(R.layout.new\u child\u item,空);
    holder.mTextView=(TextView)convertView
    .findViewById(R.id.new\u child\u itemtxv);
    holder.mTextView
    .setText(mDataList.get(groupPosition.getmChilds)()
    .get(childPosition)[0]
    + " - "
    +mDataList.get(groupPosition.getmChilds())
    .get(childPosition)[1]);
    返回视图;
    }
    @凌驾
    公共整数getChildrenCount(整数组位置){
    返回mDataList.get(groupPosition.getmChilds().size();
    }
    @凌驾
    公共对象getGroup(int-groupPosition){
    返回mDataList.get(groupPosition);
    }
    @凌驾
    public int getGroupCount(){
    返回mDataList.size();
    }
    @凌驾
    公共长getGroupId(int-groupPosition){
    返回组位置;
    }
    @凌驾
    公共视图getGroupView(int-groupPosition,布尔值isExpanded,
    视图(视图、视图组父级){
    ViewHolder=新的ViewHolder();
    convertView=mInflater.充气(R.layout.new\u group\u item,空);
    holder.mTextView=(TextView)convertView
    .findViewById(R.id.new\u grp\u itemtxv);
    holder.mTextView.setText(mDataList.get(groupPosition.getmGroup());
    返回视图;
    }
    @凌驾
    公共布尔表ID(){
    返回true;
    }
    @凌驾
    公共布尔值isChildSelectable(int-groupPosition,int-childPosition){
    返回true;
    }
    //数据部分
    类视图持有者{
    私有文本视图mTextView=null;
    }
    }
    
    使用的模态类

    public class SearchBean {
        public String getmGroup() {
            return mGroup;
        }
    
        public void setmGroup(String mGroup) {
            this.mGroup = mGroup;
        }
    
        private String mGroup = null;
    
        public ArrayList<String[]> getmChilds() {
            return mChilds;
        }
    
        public void setmChilds(ArrayList<String[]> mChilds) {
            this.mChilds = mChilds;
        }
    
        private ArrayList<String[]> mChilds = null;
    }
    
    公共类SearchBean{
    公共字符串getmGroup(){
    返回管理组;
    }
    公共void setmGroup(字符串mGroup){
    this.mGroup=mGroup;
    }
    私有字符串mGroup=null;
    公共数组列表getmChilds(){
    返回mChilds;
    }
    public void setmChilds(ArrayList mChilds){
    this.mChilds=mChilds;
    }
    private ArrayList mChilds=null;
    }
    
    为groupview和childview创建两个布局文件,每个文件中有一个textview

    使用一些伪数据创建SearchBean的arraylist

    然后使用此AccordionAdapter将数据设置为expandablelistview


    希望有帮助。

    适配器类在Fragment类中编写。所以我基本上使用的是fragments布局充气器,我在onCreate期间将其存储在一个实例变量中。您应该使用调试器来了解为什么
    attrs.getAttributeValue(null,“class”)返回
    null