保存已检查项目是列表视图

时间:2013-08-21 14:45:56

标签: c# android list xamarin.android

我有一个列表视图,每行都有一个复选框,我需要这样做,以便如果用户退出应用程序并稍后返回到该liistview,相同的项目仍然被选中,我已成功保存了已检查的项目,但是如果我尝试在列表开始滞后的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;
                  }
              }
          }

      }

临屋

1 个答案:

答案 0 :(得分:1)

如果使用块在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);
    }