ExpandableListView Родительская / дочерняя групповая проблема - PullRequest
0 голосов
/ 07 февраля 2012

Я заполняю ExpandableListView из таблицы sqlite, содержащей информацию о вызове службы.Я хочу, чтобы родительская группа была каждым уникальным сервисным сайтом, а дочерняя группа содержала информацию о вызовах для всех вызовов на этом сайте.

Site A
  Call 1
Site B
  Call 2

Вместо этого я получаю:

Site A
  Call 1
  Call 2
Site B
  Call 1
  Call 2

Каждый сервисный звонок отображается под каждым сайтом.Я бьюсь головой об стену с ExpandableListViews уже несколько дней, и единственный код, который я смог использовать, который не генерировал натиск различных ошибок, или приложение просто зависало, это

public class Today : ExpandableListActivity
{
   protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.Boards);

        List<IDictionary<string, object>> parent = new List<IDictionary<string,object>>();
        List<IList<IDictionary<string, object>>> child = new List<IList<IDictionary<string,object>>>();

        External inst = new External();
        var connection = inst.conn();
        var c = connection.CreateCommand();
        c.CommandText = "Select Distinct Store || ' ' || City || ', ' || State From Calls";
        connection.Open();
        SqliteDataReader dr = c.ExecuteReader();
        if (dr.HasRows)
            while (dr.Read())
            {
                Dictionary<string, object> pItem = new Dictionary<string,object>();
                pItem.Add("Store", dr[0].ToString());
                parent.Add(pItem);
            }
       dr.Close();
       int cnt = parent.Count();

       if (cnt > 0)
       {
           List<IDictionary<string, object>> children = new List<IDictionary<string, object>>();
           foreach(IDictionary<string, object> d in parent)
           {
               foreach (KeyValuePair<string, object> k in d)
               {
                   var store = k.Value.ToString().Substring(0, k.Value.ToString().IndexOf(" "));
                   c.CommandText = "Select CallNumber || ' ' || Description From Calls Where Store = '" + store + "'";
                   dr = c.ExecuteReader();
                   while (dr.Read())
                   {
                       Dictionary<string, object> childItem = new Dictionary<string, object>();
                       childItem.Add("Call", dr[0].ToString());
                       children.Add(childItem);
                   }
                   dr.Close();
                   child.Add(children);
               }

           }              
       }
       ExpandableListView view = (ExpandableListView)FindViewById(Android.Resource.Id.List);
       IExpandableListAdapter adapter = new SimpleExpandableListAdapter(this, parent, Android.Resource.Layout.SimpleExpandableListItem1, new string[] { "Store", "Call" }, new int[] { Android.Resource.Id.Text1, Android.Resource.Id.Text2 }, child, Android.Resource.Layout.SimpleExpandableListItem2, new string[] { "Store", "Call" }, new int[] { Android.Resource.Id.Text1, Android.Resource.Id.Text2 });
       view.SetAdapter(adapter);
    }

}

1 Ответ

1 голос
/ 07 февраля 2012

Вы добавляете childItem в один и тот же список (children), а затем добавляете этот список более одного раза в child.

Вы должны создать List<List<>> для каждой группы в ExpandableListView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...