【问题标题】:How to save state of checkboxes in expandable listview - Android如何在可扩展列表视图中保存复选框的状态 - Android
【发布时间】:2012-02-05 17:34:37
【问题描述】:

我在 Expandable ListView 中显示来自 SQLite 数据库的条目,一切正常,但我想在所有子项旁边添加一个复选框。每次我选中一个复选框然后向下滚动或收缩我选中的复选框时,它都不会保存复选框的状态。我知道每当我向下滚动并展开组等时,该列表都会被回收。如何保存每个复选框的状态(每个孩子)?我有一个扩展 CursorTreeAdapter 的类,并且方法中没有“childPosition”。为了保存状态,我需要做什么?

【问题讨论】:

    标签: android checkbox expandablelistview savestate


    【解决方案1】:

    您可以拥有一个布尔标志数组,其大小与列表元素的总和相同,并从该数组中为任何组件设置和获取检查值。

    【讨论】:

    • 感谢您的回复。如果我向上滚动,我会用哪种方法调用这个数组来设置一个复选框来检查?另外,能否提供一些示例代码?
    • 你需要在getChildView方法中使用这个数组,当你向后滚动或设置适配器时,它会被回调,我现在没有任何示例,但你可以搜索并点击链接自定义可展开的列表视图,您将获得足够的帮助。
    【解决方案2】:

    另一种解决方案是您可以为列表视图中的每个元素保留一个计数器。例如,如果您有 Person 列表,您可以在您的 Person 类中添加一个计数器变量。

    在 getChildView 方法中,将所有代码放在 if 块中,如下所示;

        public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) {
    
        //FOR SAVE THE STATES!!
        if(parents.get(groupPosition).getCounter()==0) {
            DatePicker datePicker = null;
            Button ok = null;
            Spinner installment = null;
            CheckBox creditCard;
            ......//BLA BLA BLA
    
    
            //After finish your codes, increment the counter
            parents.get(groupPosition).setCounter((parents.get(groupPosition).getCounter()+1));
        }
    
        return convertView;
    }
    

    因为对于每个调用的 expandGroup 方法,所有的初始化(现在在 if 块中)都会重复。因此,您会失去对象的状态。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多