Android 在expandableListView的第三层中填充不同的数组
我对编程比较陌生。我想这是一个非常简单的逻辑,但请容忍我。我正在开发一个三层可扩展列表视图。我找到了一个非常适合我的教程。我的问题是我需要用不同的数组填充第三层 这是Android 在expandableListView的第三层中填充不同的数组,android,arrays,expandablelistview,Android,Arrays,Expandablelistview,我对编程比较陌生。我想这是一个非常简单的逻辑,但请容忍我。我正在开发一个三层可扩展列表视图。我找到了一个非常适合我的教程。我的问题是我需要用不同的数组填充第三层 这是 public class ParentLevelAdapter extends BaseExpandableListAdapter { private final Context mContext; private final List<String> mListDataHeader; p
public class ParentLevelAdapter extends BaseExpandableListAdapter {
private final Context mContext;
private final List<String> mListDataHeader;
private final Map<String, List<String>> mListData_SecondLevel_Map;
private final Map<String, List<String>> mListData_ThirdLevel_Map;
public ParentLevelAdapter(Context mContext, List<String> mListDataHeader) {
this.mContext = mContext;
this.mListDataHeader = new ArrayList<>();
this.mListDataHeader.addAll(mListDataHeader);
// SECOND LEVEL
String[] mItemHeaders = new String[0];
mListData_SecondLevel_Map = new HashMap<>();
int parentCount = mListDataHeader.size();
for (int i = 0; i < parentCount; i++) {
String content = mListDataHeader.get(i);
Log.e("Content is: ", content );
switch (content) {
case "Level 1.1":
mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_level_one_one_child);
break;
case "Level 1.2":
mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_level_one_two_child);
break;
default:
mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_level_two);
}
mListData_SecondLevel_Map.put(mListDataHeader.get(i), Arrays.asList(mItemHeaders));
}
// THIRD LEVEL
String[] mItemChildOfChild;
List<String> listChild;
String contento = Arrays.toString(mItemHeaders);
Log.e("next content: ", contento);
mListData_ThirdLevel_Map = new HashMap<>();
for (Object o : mListData_SecondLevel_Map.entrySet()) {
Map.Entry entry = (Map.Entry) o;
Object object = entry.getValue();
if (object instanceof List) {
List<String> stringList = new ArrayList<>();
Collections.addAll(stringList, (String[]) ((List) object).toArray());
for (int i = 0; i < stringList.size(); i++) {
mItemChildOfChild = mContext.getResources().getStringArray(R.array.items_array_expandable_level_three_samsung);
listChild = Arrays.asList(mItemChildOfChild);
mListData_ThirdLevel_Map.put(stringList.get(i), listChild);
}
}
}
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final CustomExpandableListView secondLevelExpListView = new CustomExpandableListView(this.mContext);
String parentNode = (String) getGroup(groupPosition);
secondLevelExpListView.setAdapter(new SecondLevelAdapter(this.mContext, mListData_SecondLevel_Map.get(parentNode), mListData_ThirdLevel_Map));
secondLevelExpListView.setGroupIndicator(null);
secondLevelExpListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
int previousGroup = -1;
@Override
public void onGroupExpand(int groupPosition) {
if (groupPosition != previousGroup)
secondLevelExpListView.collapseGroup(previousGroup);
previousGroup = groupPosition;
}
});
return secondLevelExpListView;
}
@Override
public int getChildrenCount(int groupPosition) {
return 1;
}
@Override
public Object getGroup(int groupPosition) {
return this.mListDataHeader.get(groupPosition);
}
@Override
public int getGroupCount() {
return this.mListDataHeader.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String headerTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.expandable_list_second, parent, false);
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.lblListHeader);
lblListHeader.setText(headerTitle);
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
公共类ParentLevelAdapter扩展了BaseExpandableListAdapter{
私有最终上下文mContext;
私有最终列表mListDataHeader;
私有最终地图mListData_二级地图;
私人最终地图mListData三级地图;
公共ParentLevelAdapter(上下文mContext,列表mListDataHeader){
this.mContext=mContext;
this.mListDataHeader=new ArrayList();
this.mListDataHeader.addAll(mListDataHeader);
//二级
字符串[]mItemHeaders=新字符串[0];
mListData_SecondLevel_Map=new HashMap();
int parentCount=mListDataHeader.size();
对于(int i=0;i
这是我的array.xml
<?xml version="1.0" encoding="utf-8"?>
可移动的
笔记本电脑
虚拟现实
杂项
三星
苹果手机
关系
戴尔
惠普
宏碁
可移动的
笔记本电脑
虚拟现实
杂项
星系S4
银河S5
银河S6
星系S7
iPhone4S
iPhone5
iPhone SE
iPhone7
.... 等等
我很确定我必须在写第三级代码的地方写代码。第二层我能够相应地填充。请向我提供如何在上述代码中填充不同数组的逻辑。我希望我清楚我的问题。当Op使用这个Github示例作为他的基础时,请提前感谢您:还有u
<string-array name="items_array_expandable_level_one">
<item>Mobile</item>
<item>Laptops</item>
<item>VR</item>
<item>Misc</item>
</string-array>
<string-array name="items_array_expandable_level_one_one_child">
<item>Samsung</item>
<item>iPhone</item>
<item>Nexus</item>
</string-array>
<string-array name="items_array_expandable_level_one_two_child">
<item>Dell</item>
<item>HP</item>
<item>ACER</item>
</string-array>
<string-array name="items_array_expandable_level_two">
<item>Mobile</item>
<item>Laptops</item>
<item>VR</item>
<item>Misc</item>
</string-array>
<string-array name="items_array_expandable_level_three_samsung">
<item>Galaxy S4</item>
<item>Galaxy S5</item>
<item>Galaxy S6</item>
<item>Galaxy S7</item>
</string-array>
<string-array name="items_array_expandable_level_three_iPhone">
<item>iPhone 4s</item>
<item>iPhone 5</item>
<item>iPhone SE</item>
<item>iPhone 7</item>
</string-array> .... and so on
public class ParentLevelAdapter extends BaseExpandableListAdapter {
private final Context mContext;
private final List<String> mListDataHeader;
private final Map<String, List<String>> mListData_SecondLevel_Map;
private final Map<String, List<String>> mListData_ThirdLevel_Map;
public ParentLevelAdapter(Context mContext, List<String> mListDataHeader) {
this.mContext = mContext;
this.mListDataHeader = new ArrayList<>();
this.mListDataHeader.addAll(mListDataHeader);
// SECOND LEVEL
String[] mItemHeaders = new String[0];
mListData_SecondLevel_Map = new HashMap<>();
int parentCount = mListDataHeader.size();
for (int i = 0; i < parentCount; i++) {
String content = mListDataHeader.get(i);
Log.e("Content is: ", content );
switch (content) {
case "Level 1.1":
mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_level_one_one_child);
break;
case "Level 1.2":
mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_level_one_two_child);
break;
default:
mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_level_two);
}
mListData_SecondLevel_Map.put(mListDataHeader.get(i), Arrays.asList(mItemHeaders));
}
// THIRD LEVEL
String[] mItemChildOfChild;
List<String> listChild;
String contento = Arrays.toString(mItemHeaders);
Log.e("next content: ", contento);
mListData_ThirdLevel_Map = new HashMap<>();
for (Object o : mListData_SecondLevel_Map.entrySet()) {
Map.Entry entry = (Map.Entry) o;
Object object = entry.getValue();
if (object instanceof List) {
List<String> stringList = new ArrayList<>();
Collections.addAll(stringList, (String[]) ((List) object).toArray());
for (int i = 0; i < stringList.size(); i++) {
//newly inserted Code
String content = stringList.get(i);
switch (content) {
case "Samsung":
mItemChildOfChild = mContext.getResources().getStringArray(R.array.items_array_expandable_level_three_samsung);
break;
case "iPhone": //though I would change this to Apple and aswell in the Itemlist ;) :D
mItemChildOfChild = mContext.getResources().getStringArray(R.array.items_array_expandable_level_three_iPhone);
break;
default:
mItemChildOfChild = mContext.getResources().getStringArray(R.array.empty);}
//end of new Code
listChild = Arrays.asList(mItemChildOfChild);
mListData_ThirdLevel_Map.put(stringList.get(i), listChild);
}
}
}
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final CustomExpandableListView secondLevelExpListView = new
CustomExpandableListView(this.mContext);
String parentNode = (String) getGroup(groupPosition);
secondLevelExpListView.setAdapter(new SecondLevelAdapter(this.mContext,
mListData_SecondLevel_Map.get(parentNode), mListData_ThirdLevel_Map));
secondLevelExpListView.setGroupIndicator(null);
secondLevelExpListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
int previousGroup = -1;
@Override
public void onGroupExpand(int groupPosition) {
if (groupPosition != previousGroup)
secondLevelExpListView.collapseGroup(previousGroup);
previousGroup = groupPosition;
}
});
return secondLevelExpListView;
}
@Override
public int getChildrenCount(int groupPosition) {
return 1;
}
@Override
public Object getGroup(int groupPosition) {
return this.mListDataHeader.get(groupPosition);
}
@Override
public int getGroupCount() {
return this.mListDataHeader.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String headerTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.expandable_list_second, parent, false);
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.lblListHeader);
lblListHeader.setText(headerTitle);
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}