【问题标题】:Android listview with check boxes?带有复选框的Android列表视图?
【发布时间】:2011-11-09 04:58:06
【问题描述】:

我正在开发一个使用带有复选框的列表视图的应用程序,考虑在list-view 项目上有10 items,并且默认情况下选中复选框,直到现在一切对我来说都很好我的问题,当我取消选中列表视图中的任何复选框需要刷新整个列表视图

【问题讨论】:

  • 你的代码在哪里?可以和我们分享一下吗?
  • 你的意思是当一个复选框被取消选中后,所有的复选框都会被取消选中?
  • sry,如果任何一个复选框未被选中,则意味着列表视图中的整个数据应该被刷新,这意味着应该再次选中未选中的复选框..
  • 你的问题不太清楚。在这里发布你的代码或用图片解释你想做什么......
  • 一个小帮助我如何在 listview android 中获取复选框的位置

标签: android listview


【解决方案1】:

Nikhil 请记住,定义自定义适配器是一次性练习,一旦您正确定义并理解它,您就可以自定义任何视图,如 ListView、GridView、Gallery、Spinner。因此,请正确阅读以下答案。

要使用 CheckBox(或任何视图)定义 ListView,您必须定义自己的自定义适配器。要定义自定义适配器,请按照以下步骤操作:

  1. 定义一个自定义行文件(代表列表视图的每一项)
  2. 定义一个适配器类并扩展 BaseAdapter。
  3. 在此适配器类的 getView() 方法中扩充上述行 xml 文件。

在你的情况下,

第一步:(定义行xml文件)

<RelativeLayout>
   <TextView>
   <CheckBox>
</RelativeLayout>

第二和第三步:(定义自定义适配器类)

public class MyListViewAdapter extends BaseAdapter
{
  ....
  ....


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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.rowbuttonlayout, null);
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.text = (TextView) view.findViewById(R.id.label);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
            viewHolder.checkbox
                    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            Model element = (Model) viewHolder.checkbox
                                    .getTag();
                            element.setSelected(buttonView.isChecked());

                        }
                    });
            view.setTag(viewHolder);
            viewHolder.checkbox.setTag(list.get(position));
        } else {
            view = convertView;
            ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
        }
        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(list.get(position).getName());
        holder.checkbox.setChecked(list.get(position).isSelected());


.......
.......
}

【讨论】:

  • 你可以在这个答案中定义这个模型类
  • list.get(position) 中的列表是什么?
【解决方案2】:

特定项目的复选框没有信息。关于listView,要获取它的位置,将id设置为位置,然后在点击监听器中获取id。

第二种方法是通过在 checkBox 上设置 ListItemClickListener 而不是 checkListener 来选中/取消选中 listItemClick ,这仅在列表项只有一个可单击项(即您的复选框)时才有用。

【讨论】:

  • 嗯,第一种方式是不言自明的,第二种方式正是上面的答案。教区的说。
猜你喜欢
  • 2016-03-30
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
相关资源
最近更新 更多