На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> ExpandableListView , в отдельном классе и его вызов оттуда
    Есть класс
    ExpandedWrap disabled
       public class AdapterHelper
      {
      final String ATR_GROUP_NAME = "gropuName";
      final String ATR_PHONE_NAME = "phoneName";
       
       
      String groups[];
       
       
      String g_item[];
       
       
       
      ArrayList<Map<String,String>> groupsData;
       
       
      ArrayList<Map<String,String>> childDataItem;
       
       
       ArrayList<ArrayList<Map<String,String>>> childData;
       
       
      Map<String,String> m;
       
      Context ctx;
       
      AdapterHelper(Context ctx, String groups[],String g_item[])
      {
          this.ctx = ctx;
          this.groups = groups;
          this.g_item = g_item;
      }
       
      SimpleExpandableListAdapter adapter;
       
      SimpleExpandableListAdapter getAdapter()
       
      {
          groupsData = new ArrayList<Map<String, String>>();
          for (String group : groups)
          {
              m = new HashMap<String, String>();
              m.put(ATR_GROUP_NAME, group);
              groupsData.add(m);
          }
       
       
          String groupeFrom[] = {ATR_GROUP_NAME};
          int groupTo[] = new int[]{android.R.id.text1};
       
          childData = new ArrayList<ArrayList<Map<String, String>>>();
       
       
       
          childDataItem = new ArrayList<Map<String, String>>();
          for (String phone : g_item)
          {
              m = new HashMap<String, String>();
              m.put(ATR_PHONE_NAME, phone);
              childDataItem.add(m);
          }
          childData.add(childDataItem);
       
       
          String childFrom[] = {ATR_PHONE_NAME};
          int childTo[] = new int[]{android.R.id.text1};
       
          adapter = new SimpleExpandableListAdapter(ctx, groupsData, simple_expandable_list_item_1,
                  groupeFrom, groupTo, childData, android.R.layout.simple_list_item_1, childFrom, childTo);
       
          return adapter;
      }
       
      String getGroupText(int groupPos)
      {
          return ((Map<String,String>) (adapter.getGroup(groupPos))).get(ATR_GROUP_NAME);
      }
       
      String getChildText(int groupPos, int childPos)
      {
          return ((Map<String,String>) (adapter.getChild(groupPos, childPos))).get(ATR_PHONE_NAME);
      }
       
      String getGroupChildText(int groupPos, int childPos)
      {
          return getGroupText(groupPos) + " " + getChildText(groupPos, childPos);
      }}


    Хочу вызывать в MainActivity, что бы при каждом вызове добавлять группу и строки.
    ExpandedWrap disabled
       private ExpandableListView expandableListView;
       private AdapterHelper ah;
       private SimpleExpandableListAdapter adapter;
       
       String groups[] = {"Group_1"};
       String g_string[] = {"String","String_1","String_2"};
       
       ah = new AdapterHelper(this,groups,g_string);
       adapter = ah.getAdapter();
       
       
       expandableListView.setAdapter(adapter);


    Всё добавляется. Но только для одной группы. Что переделать что-бы при каждом отдельном вызове, добавлялась новая группа с строками? У меня в итоге добавляется только то, что было вызвано последним.
    ExpandedWrap disabled
       String groups[] = {"Group_1"};
          String strings_1[] = {"String_1","String_2","String_3"};
       
          String groups1[] = {"Group_2"};
          String strings_2[] = {"String_1","String_2","String_3"};
       
       
          ah = new AdapterHelper(this,groups,strings_1);
          ah1 = new AdapterHelper(this,groups1,strings_2);
       
          adapter = ah.getAdapter();
          adapter = ah1.getAdapter();
       
       
          expandableListView.setAdapter(adapter);

    Т.е не добавляется, а перезаписывает существующую группу.

    Решил попробовать следующее: В конструктор добавить второй параметр, к примеру String g_item_2[], а в сам метод второй вызов
    ExpandedWrap disabled
       childDataItem = new ArrayList<Map<String, String>>();
      for (String phone : g_item_2)
      {
          m = new HashMap<String, String>();
          m.put(ATR_PHONE_NAME, phone);
          childDataItem.add(m);
      }
      childData.add(childDataItem);


    получилось что если вызывать
    ExpandedWrap disabled
       String groups[] = {"Group_11","TEST"};
       
          String strings_1[] = {"String_11","String_2","String_3"};
       
          String strings_2[] = {"String_1","String_2","String_3"};
       
          textView = (TextView)findViewById(R.id.textView);
       
          ah = new AdapterHelper(this,groups,strings_1,strings_2);
          adapter = ah.getAdapter();

    то добавляет как надо. Но это не то, идет дублирование кода во первых, а во вторых теряется весь смысл, как выход использовать цикл, в котором идет перебор добавляемых массивов строк в конструкторе. И вот тут то проблема, не могу понять как соорудить этот цикл, а точнее как во второй итерации, подставить следующий массив строк. К примеру:
    ExpandedWrap disabled
       for(int a = 0; a < 2; a++) //Кол-во массивов строк в конструкторе
      {
      childDataItem = new ArrayList<Map<String, String>>();
       
          for (int a =0; a < g_item.length; a++ )
          {
              m = new HashMap<String, String>();
              m.put(ATR_PHONE_NAME, g_item[a]);
              childDataItem.add(m);
          }
          childData.add(childDataItem);
       }

    т.е добавится первый массив g_item. Как в следующую итерацию подставить следующий массив g_item_2 ?
    Сообщение отредактировано: Kamenev_D -
      Всё сделал. Заработало как надо.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0196 ]   [ 15 queries used ]   [ Generated: 29.03.24, 11:15 GMT ]