0

我正在尝试使用复选框实现列表视图。侦听器运行良好,我可以看到选择了哪个项目,但在此类中存在问题,因为 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;

      }

     }

谁能帮我?

4

1 回答 1

1

您已经为convertView包含 CheckBox 和temaTextView 的标签设置了标签,但没有为 CheckBox 本身设置标签。因此,尝试正确获取该 CheckBox 的标签会返回 null。

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

holder.tema.setTag(temaGen);

holder.checkTema.setTag(temaGen);

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

于 2014-07-29T17:50:34.167 回答