0

我有一个每行都有一个复选框的列表视图,我需要这样做,以便如果用户退出应用程序并稍后返回该列表视图,相同的项目仍然处于选中状态,我已经成功保存了选中的项目,但是如果我尝试以列表开始滞后的方法重新检查它们getview(),并开始检查随机复选框。

下面是我重新检查框的代码

 using (VehicleFeaturesDB vfdb = new VehicleFeaturesDB())
      {
          selectedfeatures = vfdb.GetSelectedFeatures(Selector.vehicleId);

          if (listOfSelectedFeatures != null)
          {
              foreach (Features f in listOfSelectedFeatures)
              {
                  if (feature.FeatureID == f.FeatureID)
                  {
                      CheckBox.Checked = true;
                  }
              }
          }

      }

4

1 回答 1

1

如果该 using 块位于 GetView() 中,则每次显示新项目时,您都将连接到数据库并拉取特征列表。这就是为什么你会看到滞后。

如果该功能不在列表中,您也没有将 Checked 设置为 false,因此当您重用 convertview 时,复选框可能已经被选中。这就是为什么您看到随机框被选中的原因。

我可能会在您的适配器的构造函数中获得选定的功能,然后在您的 GetView() 中引用该列表。像这样的东西应该适合你。

public class MyAdapter...
{
    private IEnumerable<SelectedFeature> selectedFeatures;
    public MyAdapter()
    {
        ...your code...
        using (VehicleFeaturesDB vfdb = new VehicleFeaturesDB())
        {
            selectedfeatures = vfdb.GetSelectedFeatures(Selector.vehicleId);
        }
    }

    public override View GetView(int pos, View convertView, ViewGroup parent)
    {
        ...your code...
        CheckBox.Checked = selectedFeatures.Any(sf => sf.FeatureID == feature.FeatureID);
    }
于 2013-08-21T20:32:15.947 回答