Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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 getview上的Nullpointerexception自定义适配器无充气器_Java_Android_Nullpointerexception - Fatal编程技术网

Java getview上的Nullpointerexception自定义适配器无充气器

Java getview上的Nullpointerexception自定义适配器无充气器,java,android,nullpointerexception,Java,Android,Nullpointerexception,每当我在android应用程序中向下滚动时,第79行就会出现nullpointerexception linear.addView(holder.rbg) 我尝试了几种解决方案,但似乎都不起作用,因为我不使用充气机,因为我不知道它是如何工作的。 我可以向您提供我的XML文件,但其中唯一的内容是线性布局 private class MyAdapter extends ArrayAdapter<String> { public MyAdapter(Context co

每当我在android应用程序中向下滚动时,第79行就会出现nullpointerexception linear.addView(holder.rbg)
我尝试了几种解决方案,但似乎都不起作用,因为我不使用充气机,因为我不知道它是如何工作的。 我可以向您提供我的XML文件,但其中唯一的内容是线性布局

 private class MyAdapter extends ArrayAdapter<String> {

        public MyAdapter(Context context, String[] strings) {
            super(context, -1, -1, strings);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {       //trying to reuse a recycled view
            ViewHolder holder;
            View v = convertView;
            LinearLayout linear = new LinearLayout(Bouwonderdeel.this);
            if (v == null) {
            holder = new ViewHolder();
           linear.setLayoutParams(new AbsListView.LayoutParams(
                    AbsListView.LayoutParams.WRAP_CONTENT,
                    AbsListView.LayoutParams.WRAP_CONTENT));
           linear.setId(50);
            holder.tv = new TextView(Bouwonderdeel.this);
            holder.tv.setId(100);

            holder.rbg = new RadioGroup(Bouwonderdeel.this);
            holder.rbg.setId(200);
            holder.rbg.setOrientation(LinearLayout.HORIZONTAL); 
            holder.rbg.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                public void onCheckedChanged(RadioGroup group, int checkedId) {


                }
            });
            //Make the list Items containing radiobuttons en textviews.
            for (int i = 0; i < 5; i++) {
                        holder.rName = new RadioButton (Bouwonderdeel.this);
                        holder.rbg.addView(holder.rName);
            }  

            }
            else{
                holder = (ViewHolder) v.getTag();
            }

             linear.addView(holder.rbg);
             linear.addView(holder.tv);
             holder.tv.setText(super.getItem(position));

            return linear;

        }
    }
  static class ViewHolder{
        RadioButton rName;
        RadioGroup rbg;
        TextView tv;
        }
私有类MyAdapter扩展了ArrayAdapter{
公共MyAdapter(上下文上下文,字符串[]字符串){
super(上下文,-1,-1,字符串);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父级){//尝试重用回收的视图
视窗座;
视图v=转换视图;
LinearLayout linear=新的LinearLayout(Bouwonderdeel.this);
如果(v==null){
holder=新的ViewHolder();
linear.setLayoutParams(新的AbsListView.LayoutParams(
AblistView.LayoutParams.WRAP_内容,
AbsListView.LayoutParams.WRAP_CONTENT);
线性。setId(50);
holder.tv=新文本视图(Bouwonderdeel.this);
支架.电视.设置ID(100);
holder.rbg=新的放射组(Bouwonderdeel.this);
持有者.rbg.setId(200);
支架rbg设置方向(线性布局水平);
holder.rbg.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
检查更改后的公共无效(RadioGroup组,int checkedId){
}
});
//在文本视图中创建包含单选按钮的列表项。
对于(int i=0;i<5;i++){
holder.rName=新单选按钮(Bouwonderdeel.this);
holder.rbg.addView(holder.rName);
}  
}
否则{
holder=(ViewHolder)v.getTag();
}
线性.addView(holder.rbg);
linear.addView(holder.tv);
holder.tv.setText(super.getItem(position));
返回线性;
}
}
静态类视窗夹{
单键rName;
放射组rbg;
文本视图电视;
}

通过以下方式更改代码:

 private class MyAdapter extends ArrayAdapter<String> {

            public MyAdapter(Context context, String[] strings) {
                super(context, -1, -1, strings);
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {       //trying to reuse a recycled view
                ViewHolder holder;
    if(convertView == null){
                holder = new ViewHolder();
                LayoutInflater mInflater = (LayoutInflater)  context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = mInflater.inflate(R.layout.yourlayout, null);

    LinearLayout linear = (LinearLayout) convertView.findViewById(R.id.lnlayout);
    linear.setLayoutParams(new AbsListView.LayoutParams(
                        AbsListView.LayoutParams.WRAP_CONTENT,
                        AbsListView.LayoutParams.WRAP_CONTENT));
    holder.tv = (TextView) convertView.findViewById(R.id.lnlayout);
    holder.rbg = (RadioGroup) convertView.findViewById(R.id.lnlayout);
    convertView.setTag(holder);

    } else{
        holder = (ViewHolder) convertView.getTag()
    }



               linear.setId(50);

                holder.tv.setId(100);


                holder.rbg.setId(200);
                holder.rbg.setOrientation(LinearLayout.HORIZONTAL); 
                holder.rbg.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                    public void onCheckedChanged(RadioGroup group, int checkedId) {


                    }
                });
                //Make the list Items containing radiobuttons en textviews.
                for (int i = 0; i < 5; i++) {
                            holder.rName = new RadioButton (Bouwonderdeel.this);
                            holder.rbg.addView(holder.rName);
                }  

                }
                else{
                    holder = (ViewHolder) v.getTag();
                }

                 linear.addView(holder.rbg);
                 linear.addView(holder.tv);
                 holder.tv.setText(super.getItem(position));

                return convertView;

            }
        } 
hope it will help you
私有类MyAdapter扩展了ArrayAdapter{
公共MyAdapter(上下文上下文,字符串[]字符串){
super(上下文,-1,-1,字符串);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父级){//尝试重用回收的视图
视窗座;
if(convertView==null){
holder=新的ViewHolder();
LayoutInflater mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
convertView=mInflater.充气(R.layout.yourlayout,null);
LinearLayout linear=(LinearLayout)convertView.findViewById(R.id.lnlayout);
linear.setLayoutParams(新的AbsListView.LayoutParams(
AblistView.LayoutParams.WRAP_内容,
AbsListView.LayoutParams.WRAP_CONTENT);
holder.tv=(TextView)convertView.findViewById(R.id.lnlayout);
holder.rbg=(放射组)convertView.findViewById(R.id.lnlayout);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag()
}
线性。setId(50);
支架.电视.设置ID(100);
持有者.rbg.setId(200);
支架rbg设置方向(线性布局水平);
holder.rbg.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
检查更改后的公共无效(RadioGroup组,int checkedId){
}
});
//在文本视图中创建包含单选按钮的列表项。
对于(int i=0;i<5;i++){
holder.rName=新单选按钮(Bouwonderdeel.this);
holder.rbg.addView(holder.rName);
}  
}
否则{
holder=(ViewHolder)v.getTag();
}
线性.addView(holder.rbg);
linear.addView(holder.tv);
holder.tv.setText(super.getItem(position));
返回视图;
}
} 
希望对你有帮助

你能提供日志吗@ppuskar check edit,将其发布在在线记事本中,这样评论就不会长达数英里。return convertView改为getView()中的线性视图@Haresh Chhelana当我调用convertView时,它在app.holder.tv=(TextView)convertView.findViewById(R.id.lnlayout)上给出一个空白页面;这些标签是如何工作的?因为我在版面中没有文本视图,直到创建?似乎无法找到它:/这是相当模糊的,但标记基本上是一个对象形式的数据包。创建保持架,为其提供数据,然后将其设置为convertView上的标记作为额外数据。您不知道要取回哪个convertView,但多亏了Tag,您才可以取回您的持有者,并将特定信息绑定到存储在convertView中的特定列表项。这个答案确实解决了仅当convertView为null时数据才会更改的问题,而这在第一次之后就不是这样了,您正在使用内部类。这些文件包含对与其关联的活动的隐式引用,并将泄漏整个活动。你要么让它们静止,要么把它们移出课堂,给它们一个活动的弱参考。谢谢,伙计,我会看一下视频,如果在视频后它不起作用,我会回来找你。在这个问题上挣扎了很长时间。