Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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
Android 我寻找这个空指针异常是因为带有微调器的getTag,已经有一段时间了_Android - Fatal编程技术网

Android 我寻找这个空指针异常是因为带有微调器的getTag,已经有一段时间了

Android 我寻找这个空指针异常是因为带有微调器的getTag,已经有一段时间了,android,Android,几天来,我一直想实现一个包含微调器的ListView。我对android真的很陌生,所以从一个论坛到另一个论坛,我设法让一些东西工作起来。 我唯一的问题是,在我的真实设备上向下滚动时,微调器的值丢失或行为异常(有时会重置,有时最后一个元素会取第一个元素的值..等等) 当我读到这篇文章时,我发现android会回收视图,所以我尝试使用这个概念。 请你告诉我正确的方法,或者告诉我我做错了什么。 我得到的错误如下: 04-27 19:43:09.649:E/AndroidRuntime(7530):j

几天来,我一直想实现一个包含微调器的ListView。我对android真的很陌生,所以从一个论坛到另一个论坛,我设法让一些东西工作起来。 我唯一的问题是,在我的真实设备上向下滚动时,微调器的值丢失或行为异常(有时会重置,有时最后一个元素会取第一个元素的值..等等) 当我读到这篇文章时,我发现android会回收视图,所以我尝试使用这个概念。 请你告诉我正确的方法,或者告诉我我做错了什么。 我得到的错误如下: 04-27 19:43:09.649:E/AndroidRuntime(7530):java.lang.NullPointerException 04-27 19:43:09.649:E/AndroidRuntime(7530):在com.example.mysqlconnection.mycustomarrayadapter.getView(mycustomarrayadapter.java:106)

其中,第106行对应于: holder.Spin.setSelection((整数)(holder.Spin.getTag())

多谢各位

list_item.xml android:orientation=“horizontal”>


公共类MyCustomArrayAdapter扩展了ArrayAdapter>{

private static final String TAG_PID = "EnfantId";
private static final String TAG_NOM = "Prenom";

HashMap<String, String> hm = new HashMap<String, String>();      
SpinnerContent data[] = null;    
int[] anArray;

Context context; 

int layoutResourceId;
ArrayList<HashMap<String, String>> localList;
LayoutInflater inflater;

public MyCustomeArrayAdapter(Context pContext,  int layoutResourceId, ArrayList<HashMap<String, String>> list) {
    super(pContext, layoutResourceId, list);

    this.context = pContext;
    this.layoutResourceId = layoutResourceId;

    this.localList = new ArrayList<HashMap<String, String>>();
    this.localList.addAll(list);
    inflater = (LayoutInflater)    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    data = new SpinnerContent[20];
    anArray = new int[20];

}
private static final String TAG_PID=“EnfantId”;
私有静态最终字符串标记_NOM=“Prenom”;
HashMap hm=新的HashMap();
喷丝板内容数据[]=null;
国际[]无秩序;
语境;
国际布局资源;
arraylistlocallist;
充气机;
公共MyCustomerRayaAdapter(上下文pContext、内部布局资源ID、数组列表){
super(pContext、layoutResourceId、list);
this.context=pContext;
this.layoutResourceId=layoutResourceId;
this.localList=new ArrayList();
this.localList.addAll(list);
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
数据=新喷丝板含量[20];
anArray=新整数[20];
}
@凌驾 公共视图getView(最终整数位置、视图转换视图、视图组父视图){

查看行=null;
最终喷丝头支架;
if(convertView==null)
{                   
行=充气机。充气(布局资源ID,空);
保持架=新喷丝头保持架();
holder.name=(TextView)row.findViewById(R.id.name);
holder.pid=(TextView)row.findViewById(R.id.pid);
holder.Spin=(微调器)row.findViewById(R.id.presence);
holder.Spin.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、View selectedItemView、int SpinPosition、长id){
保持架.旋转.设置标签(旋转位置);
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}   
});
row.setTag(支架);
}
其他的
{
行=转换视图;
holder=(喷丝头holder)行。getTag();
}
hm=localList.get(位置);
holder.pid.setText(hm.get(TAG_pid));
holder.name.setText(hm.get(TAG_NOM));
holder.Spin.setSelection((整数)(holder.Spin.getTag());
返回行;
}
私家级喷丝板架
{
文本视图名称;
文本视图pid;
旋转器旋转;
}

}旋转标记没有默认值。可以将视图保存在地图中,并为每个位置创建唯一视图,而不是循环使用其他视图

     //member vairous
     Map mViews = new HashMap<Integer, View>(); 

     @Override public View getView(final int position, View convertView, ViewGroup parent){
         View view = mViews.get(position);

         if(view == null)
            {                   
                view = inflater.inflate(layoutResourceId, null);

                holder = new SpinnerHolder();

                holder.name = (TextView)view.findViewById(R.id.name);
                holder.pid = (TextView)view.findViewById(R.id.pid);
                holder.Spin = (Spinner)view.findViewById(R.id.presence);
                //set the default value.
                holder.Spin.setTag(0);
                holder.Spin.setOnItemSelectedListener(new OnItemSelectedListener(){
                    @Override
                    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int SpinPosition, long id) {

                        holder.Spin.setTag(SpinPosition);
                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> arg0) {
                        // TODO Auto-generated method stub
                    }   
                });
                view.setTag(holder);
                mViwes.put(position, view);
            }
            else
            {
                holder = (SpinnerHolder)view.getTag();
            }
            hm = localList.get(position);

            holder.pid.setText(hm.get(TAG_PID));
            holder.name.setText(hm.get(TAG_NOM));     

            holder.Spin.setSelection((Integer) (holder.Spin.getTag()));
            return view;
       }
//成员
Map mViews=newhashmap();
@覆盖公共视图getView(最终整数位置、视图转换视图、视图组父视图){
View=mViews.get(位置);
如果(视图==null)
{                   
视图=充气机。充气(布局资源ID,null);
保持架=新喷丝头保持架();
holder.name=(TextView)view.findViewById(R.id.name);
holder.pid=(TextView)view.findViewById(R.id.pid);
holder.Spin=(微调器)view.findViewById(R.id.presence);
//设置默认值。
保持器旋转设置标签(0);
holder.Spin.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、View selectedItemView、int SpinPosition、长id){
保持架.旋转.设置标签(旋转位置);
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}   
});
视图.设置标签(支架);
mViwes.put(位置、视图);
}
其他的
{
holder=(SpinnerHolder)视图.getTag();
}
hm=localList.get(位置);
holder.pid.setText(hm.get(TAG_pid));
holder.name.setText(hm.get(TAG_NOM));
holder.Spin.setSelection((整数)(holder.Spin.getTag());
返回视图;
}

我终于通过搜索web找到了解决方案: 我在构造函数中声明了一个hashmap,如下所示: HashMap(Integer,Integer>selectedItems=newhashmap(Integer,Integer>()

然后我更改了getView()方法,如下所示:

@凌驾 公共视图getView(最终整数位置、视图转换视图、视图组父视图){

//视图行=super.getView(位置、转换视图、父级);
视图行=充气机。充气(布局资源ID,null);
hm=localList.get(位置);
((TextView)row.findviewbyd(R.id.name)).setText(hm.get(TAG_NOM));
((TextView)row.findviewbyd(R.id.pid)).setText(hm.get(TAG_-pid));
if(selectedItems.get(位置)!=null)
{
((微调器)row.findviewbyd(R.id.presence)).setSelection(selectedItems.get(position));
}
((微调器)row.findViewById(R.id.presence)).setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
公共voi
   View row = null;   
   final SpinnerHolder holder;     

   if(convertView == null)
    {                   
        row = inflater.inflate(layoutResourceId, null);

        holder = new SpinnerHolder();

        holder.name = (TextView)row.findViewById(R.id.name);
        holder.pid = (TextView)row.findViewById(R.id.pid);
        holder.Spin = (Spinner)row.findViewById(R.id.presence);
        holder.Spin.setOnItemSelectedListener(new OnItemSelectedListener(){
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int SpinPosition, long id) {

                holder.Spin.setTag(SpinPosition);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
            }   
        });

        row.setTag(holder);
    }
    else
    {
        row = convertView;
        holder = (SpinnerHolder)row.getTag();
    }

   hm = localList.get(position);

   holder.pid.setText(hm.get(TAG_PID));
   holder.name.setText(hm.get(TAG_NOM));     

   holder.Spin.setSelection((Integer) (holder.Spin.getTag()));
   return row;
}

private class SpinnerHolder
{
    TextView name;
    TextView pid;
    Spinner Spin;
}
     //member vairous
     Map mViews = new HashMap<Integer, View>(); 

     @Override public View getView(final int position, View convertView, ViewGroup parent){
         View view = mViews.get(position);

         if(view == null)
            {                   
                view = inflater.inflate(layoutResourceId, null);

                holder = new SpinnerHolder();

                holder.name = (TextView)view.findViewById(R.id.name);
                holder.pid = (TextView)view.findViewById(R.id.pid);
                holder.Spin = (Spinner)view.findViewById(R.id.presence);
                //set the default value.
                holder.Spin.setTag(0);
                holder.Spin.setOnItemSelectedListener(new OnItemSelectedListener(){
                    @Override
                    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int SpinPosition, long id) {

                        holder.Spin.setTag(SpinPosition);
                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> arg0) {
                        // TODO Auto-generated method stub
                    }   
                });
                view.setTag(holder);
                mViwes.put(position, view);
            }
            else
            {
                holder = (SpinnerHolder)view.getTag();
            }
            hm = localList.get(position);

            holder.pid.setText(hm.get(TAG_PID));
            holder.name.setText(hm.get(TAG_NOM));     

            holder.Spin.setSelection((Integer) (holder.Spin.getTag()));
            return view;
       }
   //  View row = super.getView(position, convertView, parent);
   View row = inflater.inflate(layoutResourceId, null);   
   hm = localList.get(position);
   ((TextView)row.findViewById(R.id.name)).setText(hm.get(TAG_NOM));
   ((TextView)row.findViewById(R.id.pid)).setText(hm.get(TAG_PID));
   if (selectedItems.get(position) != null)
   {
    ((Spinner)row.findViewById(R.id.presence)).setSelection(selectedItems.get(position));
   }

   ((Spinner)row.findViewById(R.id.presence)).setOnItemSelectedListener(new OnItemSelectedListener(){
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int SpinPosition, long id) {           
        selectedItems.put(position, SpinPosition);          
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }   
});

   return row;
}