簡體   English   中英

帶有復選框的列表視圖中的Viewholder問題

[英]Problems with viewholder in a listview with checkbox

我正在嘗試實現帶有復選框的列表視圖。 偵聽器運行良好,我可以看到選擇了哪個項目,但是此類中有問題,因為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;

      }

     }

誰能幫我?

您已經為convertView設置了一個標簽,其中包含CheckBox和tema TextView的tema ,但是沒有為CheckBox本身設置。 因此,嘗試獲取該CheckBox的標簽正確返回null。

通過查看代碼,您真正想要做的就是改變

holder.tema.setTag(temaGen);

holder.checkTema.setTag(temaGen);

這將為您的CheckBox提供temaGen標簽,而不是當前正在獲取該標簽的TextView。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM