Во-первых, ExpandableListView
поддерживает простой способ расширить группу, в которой вы нуждаетесь:
mGattServicesList.expandGroup(groupPosition);
Программно щелкнуть элемент немного сложно. Вы на правильном пути с использованием метода performItemClick()
, но вы немного о том, как его использовать. Предполагаю, что вы не используете заголовки. Это еще больше усложняет ситуацию.
Сначала вам нужно получить представление, которое нужно щелкнуть. Как ни странно, это не является обязательным требованием. Вы можете безопасно вызывать performItemClick()
с нулевым представлением. Единственным недостатком является то, что ваш дочерний кликер-получатель также получит нулевое представление.
//First we need to pack the child's two position identifiers
long packedPos = ExpandableListView.getPackedPositionForChild(int groupPosition, int childPosition);
//Then we convert to a flat position to use with certain ListView methods
int flatPos = mGattServicesList.getFlatListPosition(packedPos);
//Now adjust the position based on how far the user has scrolled the list.
int adjustedPos = flatPos - mGattServicesList.getFirstVisiblePosition();
//If all is well, the adjustedPos should never be < 0
View childToClick = mGattServicesList.getChildAt(adjustedPos);
Теперь нужно положение и идентификатор скормить performItemclick()
. Вы увидите, что шаги похожи на получение представления. Так что, действительно, вам не нужно снова вводить это снова ...но, чтобы показать, что вам нужно:
//You can just reuse the same variables used above to find the View
long packedPos = ExpandableListView.getPackedPositionForChild(int groupPosition, int childPosition);
int flatPos = mGattServicesList.getFlatListPosition(packedPos);
//Getting the ID for our child
long id = mGattServicesList.getExpandableListAdapter().getChildId(groupPosition, childPosition);
Наконец, вы можете вызвать ваш performItemClick()
:
performItemClick(childToClick, flatPos, id);
я должен предварить, я не добирался, чтобы проверить этот код против IDE, так что могут быть некоторые синтаксические ошибки, которые предотвратят компиляцию. Но в целом все должны передать, к сожалению, не очень простые шаги при программном нажатии дочернего представления.
Заключительное примечание: представленный вами рисунок показывает, что число участников группы и ребенка начинается с 1. Помните, что они фактически считаются позициями с нулевой позицией. Итак, первая группа находится в позиции 0, а первый ребенок для каждой группы находится в позиции 0.
Спасибо за этот ответ! однако кажется, что метод getChildId (groupPosition, childPosition) не существует, и я не могу найти другой метод в http://developer.android.com/reference/android/widget/ExpandableListView.html#getSelectedId%28%29 – Bob
Nevermind, он действительно существует с помощью адаптера – Bob
Да, это сработало !! Действительно, в строке mGattServicesList.getChildId (groupPosition, childPosition); Я изменил его на: mGattServicesList.getExpandableListAdapter(). GetChildId (1,2); и работал отлично, спасибо большое :) – Bob