프로그래밍에 비교적 익숙하지 않습니다. 나는 이것이 매우 단순한 논리라고 생각하지만 나와 함께 견뎌야한다. 3 단계 확장 가능한 ListView에서 일하고 있습니다. 나는 완벽하게 작동하는 튜토리얼을 발견했다. 내 문제는 내가 다른 배열로 세 번째 수준을 채울 필요가있다. expandableListView의 세 번째 레이어에 다른 배열 채우기
이
내가 내 코드를 작성해야 확신이 내 array.xml<?xml version="1.0" encoding="utf-8"?>
<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++) {
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;
}
}
곳을 세 번째 수준을 말합니다. 두 번째 레이어 내가 그에 따라 채울 수있게되고있다. 제발 내가 어떻게 위의 코드에서 다른 배열을 채울 수있는 논리를 제공하십시오. 나는 내 문제로 분명히 희망한다. 미리 감사드립니다.
@kinjal 제 문제로 저를 도울 수 있습니까? 당신이 내 질문을 편집 한 것을 봅니다. 네가 나를 도울 수 있다면 정말 기뻐할거야. –