另一种方法,listview点击事件使用setOnClickListener而不是ONItemclickListener

时间:2012-04-27 12:31:30

标签: android

我想实现,当我选择列表视图时,我的复选框将被选中。 enter image description here

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_row, null);

        holder = new ViewHolder();
        holder.checkbox = (CheckBox) convertView.findViewById(R.id.mycheckbox);
        holder.text = (TextView) convertView.findViewById(R.id.mytext);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    MyList mylist = mItems.get(position);

holder.text.setText(mylist.getMyText());


    holder.checkbox.setChecked(mChecked.get(position));
holder.chkItem.setChecked(mChecked.get(position));
    holder.chkItem.setOnCheckedChangeListener(new OnCheckedChangeListener()
     {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            mChecked.set((Integer) buttonView.getTag(),isChecked);

        }
     });

    return convertView;
}

static class ViewHolder {
    CheckBox checkbox;
    TextView text;
}
}

这里只选中复选框项目,但我想如果我点击列表视图,复选框将被选中,任何一个手杖帮我?为什么我再问同样的问题意味着我尝试列表视图点击事件通过项目点击监听器,但它不工作我也尝试了setFocusable(true),但没有工作。

4 个答案:

答案 0 :(得分:1)

这是我的回答,

convertView .setOnClickListener(new OnClickListener() {         

        public void onClick(View v) {
            // TODO Below is hardcoded to get item at index 1
            // This needs to be changed to fool-proof
            CheckBox checkBox = ((CheckBox)v.getTouchables().get(1));
            checkBox.setChecked(! checkBox.isChecked()); 

            System.out.println("Listview clicked");
        }
    });

答案 1 :(得分:0)

在列表对象上使用onitemclicklistener。如果选择了行,则会选中复选框。

答案 2 :(得分:0)

您必须在列表中实现onItemClickListener。

list.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
              ViewHolder yourView = (ViewHolder) view;
              //do whatever you want with your view..
            }
    });

答案 3 :(得分:0)

在列表项的XML布局中将复选框标记为focusable =“false”。然后处理listview的onClickListener,并切换复选框的选中状态。

如果没有focusable =“false”,该复选框将从列表视图中窃取点击次数。