带有复选框的列表视图中的查看者问题

时间:2014-07-29 17:45:16

标签: android listview checkbox android-viewholder

我尝试使用复选框实现列表视图。 听众工作得很好,我可以看到哪个项被选中buti在这个类中有问题,因为cb.getTag()返回null。

private class MyCustomAdapter extends ArrayAdapter<TemaRescatado> {

    private class ViewHolder {
       TextView tema;
       CheckBox checkTema;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;

        if (convertView == null) {
           LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           convertView = vi.inflate(R.layout.item_gen, null);

           holder = new ViewHolder();
           holder.tema = (TextView) convertView.findViewById(R.id.subtema);
           holder.checkTema = (CheckBox) convertView.findViewById(R.id.checktema);
           convertView.setTag(holder);

           holder.checkTema.setOnClickListener( new View.OnClickListener() { 
               public void onClick(View v) { 
                   CheckBox cb = (CheckBox) v ; 
                   TemaRescatado temaGen = (TemaRescatado) cb.getTag(); //returns null
                   temaGen.setSelected(cb.isChecked());
                    } 
           }); 
       }
       else {
        holder = (ViewHolder) convertView.getTag();
       }

       TemaRescatado temaGen = temaList.get(position);

       holder.tema.setText(temaGen.getTema());
       holder.checkTema.setChecked(temaGen.isSelected());
       holder.tema.setTag(temaGen);

       return convertView;

      }

     }
谁能帮助我吗?

1 个答案:

答案 0 :(得分:1)

您已为convertView设置了一个标记,其中包含CheckBox和tema TextView,但不包含CheckBox本身。因此,尝试正确获取该CheckBox的标记将返回null。

通过查看代码,看起来你真正想做的就是改变

holder.tema.setTag(temaGen);

holder.checkTema.setTag(temaGen);

这将为您的CheckBox提供temaGen标记,而不是当前获取该标记的TextView。