Я уже работал с такой проблемой, и вот такой подход я использовал:
И создали объект класса, который будет использоваться в качестве пункта меню слева для детей и видом родительских
public class LeftMenuItem {
int mTextId;
int mImageId;
//Action to be taken after clicking on the item
String mAction;
public LeftMenuItem(int textId, int imageId,String action) {
this.mTextId = textId;
this.mImageId = imageId;
this.mAction = action;
}
public int getTextId() {
return mTextId;
}
public void setTextId(int textId) {
this.mTextId = textId;
}
public int getImageId() {
return mImageId;
}
public void setImageId(int imageId) {
this.mImageId = imageId;
}
public String getAction() {
return mAction;
}
public void setAction(String action) {
this.mAction = action;
}
}
и создал свой расширяемый элемент списка, который будет содержать leftmenuitem родителя и ArrayList детей, если найдены
public class ExpandableLeftMenuItem {
LeftMenuItem mParentItem;
ArrayList<LeftMenuItem> mChildItems;
public ExpandableLeftMenuItem(LeftMenuItem parentItem,
ArrayList<LeftMenuItem> childItems) {
this.mParentItem = parentItem;
this.mChildItems = childItems;
}
public LeftMenuItem getParentItem() {
return mParentItem;
}
public void setParentItem(LeftMenuItem parentItem) {
this.mParentItem = parentItem;
}
public ArrayList<LeftMenuItem> getChildItems() {
return mChildItems;
}
public void setChildItems(ArrayList<LeftMenuItem> childItems) {
this.mChildItems = childItems;
}
}
Затем я обрабатываюсь ExpandableListView
onChildClickListener и onGroupClickListener следующего
// In Case of clicking on an item that has children, then get the action
// of this child item and show the screen with this action
mLeftMenu.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View view, int groupPosition, int childPosition, long id) {
if (!mLeftMenuItems.get(groupPosition).getChildItems().isEmpty()) {
String action = ((LeftMenuItem) mLeftMenuItems.get(groupPosition).getChildItems().get(childPosition)).getAction();
setSelectedSection(action);
handleLeftMenuClick(action);
return true;
}
return false;
}
});
// In Case of clicking on an item that has no children, then get the
// action of this item and show the screen with this action
mLeftMenu.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View view, int groupPosition, long id) {
if (mLeftMenuItems.get(groupPosition).getChildItems().isEmpty()) {
String action = ((LeftMenuItem) mLeftMenuItems.get(groupPosition).getParentItem()).getAction();
setSelectedSection(action);
handleLeftMenuClick(action);
// Return true to stop parent from expanding or collapsing group
return true;
}
// Return true to handle click as parent by expanding or collapsing group
return false;
}
});
Тогда для следующего
ExpandableListView:
group
group
group
child
child
group
child
child
Вы создадите следующие пункты меню:
ArrayList<ExpandableLeftMenuItem> mMenuItems = new ArrayList<ExpandableLeftMenuItem>();
mMenuItems.add(new ExpandableLeftMenuItem(new LeftMenuItem(parent1Text,parent1Image,action1),new ArrayList<LeftMenuItem>()));
mMenuItems.add(new ExpandableLeftMenuItem(new LeftMenuItem(parent2Text,parent2Image,action2),new ArrayList<LeftMenuItem>()));
ArrayList<LeftMenuItem> parent3Children = new ArrayList<LeftMenuItem>();
parent3Children.add(new LeftMenuItem(parent3Child1TextId,parent3Child1ImageId,parent3Child1action));
parent3Children.add(new LeftMenuItem(parent3Child2TextId,parent3Child2ImageId,parent3Child2action));
mMenuItems.add(new ExpandableLeftMenuItem(new LeftMenuItem(parent1Text,parent1Image,action1),parent3Children));
Таким образом, вы обработали как детей и групп, чтобы принимать различные меры.
Я надеюсь, что это поможет.
Да, я придумал то же самое решение, наконец, я ищу способ только иметь один onclicklistener, а затем определить, является ли строка группой или дочерним элементом с «экземпляром», но я не уверен, что это возможно –