2013-03-21 4 views
3

В файле ExpandableListView можно сначала выбрать дочерний элемент, чтобы содержащая группа была расширена, а список прокручивается до положения этого ребенка?Выбор ребенка в ExpandableListView

Я думал, что setSelectedChild сделал бы трюк, но это не дает никакого результата.

я тестировал со следующим фрагментом кода:

public class MainActivity extends Activity { 

private static final String TITLE = "title"; 

@SuppressWarnings("serial") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ExpandableListView listView = new ExpandableListView(this); 
    SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(this, 
     new ArrayList<Map<String,String>>() { 
      { 
       this.add(new HashMap<String, String>() { 
        { 
         this.put(TITLE, "Group 1"); 
        } 
       }); 
       this.add(new HashMap<String, String>() { 
        { 
         this.put(TITLE, "Group 2"); 
        } 
       }); 
       this.add(new HashMap<String, String>() { 
        { 
         this.put(TITLE, "Group 3"); 
        } 
       }); 
      } 
     }, 
     android.R.layout.simple_expandable_list_item_1, 
     new String[] { TITLE }, 
     new int[] { android.R.id.text1 }, 
     new ArrayList<List<? extends Map<String,String>>>() { 
      { 
       this.add(new ArrayList<Map<String,String>>() { 
        { 
         this.add(new HashMap<String, String>() { 
          { 
           this.put(TITLE, "Child 1-1"); 
          } 
         }); 
         this.add(new HashMap<String, String>() { 
          { 
           this.put(TITLE, "Child 1-2"); 
          } 
         }); 
        } 
       }); 
       this.add(new ArrayList<Map<String,String>>() { 
        { 
         this.add(new HashMap<String, String>() { 
          { 
           this.put(TITLE, "Child 2-1"); 
          } 
         }); 
         this.add(new HashMap<String, String>() { 
          { 
           this.put(TITLE, "Child 2-2"); 
          } 
         }); 
        } 
       }); 
       this.add(new ArrayList<Map<String,String>>() { 
        { 
         this.add(new HashMap<String, String>() { 
          { 
           this.put(TITLE, "Child 3-1"); 
          } 
         }); 
         this.add(new HashMap<String, String>() { 
          { 
           this.put(TITLE, "Child 3-2"); 
          } 
         }); 
        } 
       }); 
      } 
     }, 
     android.R.layout.simple_expandable_list_item_2, 
     new String[] { TITLE }, 
     new int[] { android.R.id.text1 } 
    ); 
    listView.setAdapter(adapter); 
    setContentView(listView); 

    listView.setSelectedChild(1, 1, true); 
} 
} 

ответ

7

Добавьте вызов listView.expandGroup() перед тем setSelectedChild().

Параметр shouldExpandGroup, установленный в true в setSelectedChild(), кажется, работает только в том случае, если по крайней мере одна группа расширена в первую очередь.

+0

Вот так. Спасибо – fiddler

+0

Идеальное решение .... – karn

+1

Почему документ не говорит о 'Параметр shouldExpandGroup, установленный в true в setSelectedChild(), кажется, работает только в том случае, если по крайней мере одна группа расширена в первую очередь.' ?? – nmxprime

0

В ExpandableListView можно ли сначала выбрать дочерний элемент, чтобы содержащая группа расширяется и список прокручивается в положение этого ребенка:

//select child and open it's group 
ExpListView.setSelectedChild(groupPos, childPos, true); 
//scroll to selected child 
ExpListView.smoothScrollToPosition(ExpListView.getFlatListPosition(ExpListView.getPackedPositionForChild(groupPos, childPos))); 
Смежные вопросы