Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在expandableListView的第三层中填充不同的数组_Android_Arrays_Expandablelistview - Fatal编程技术网

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;
}
}