如何在Android中使用ArrayList填充ExpandableListView

时间:2014-01-08 12:06:08

标签: android arrays arraylist expandablelistview expandablelistadapter

我正在尝试使用ArrayList动态填充ExpandableListView,用于视图组和ArrayList>对于项目视图。我设法通过带有虚拟数据的固定String数组来实现它的工作方式,但是因为我将一直处理这些对象作为ArrayLists,所以我想保持这样。我得到一个IndexOutOfBoundsException:索引1无效,目前大小为1。我一直试图让它工作一段时间,我做了很多搜索,并没有真正找到任何适用于我想做的事情以及如何做到的信息。请任何人帮助我看看我做错了什么。提前谢谢。

这是代码,我保留了固定的字符串数组,以显示我想要的ArrayLists和注释掉的字符串数组代码:

public class ConfigAdapter extends BaseExpandableListAdapter
{
private Activity activity;
public String []groupList = {"Group1", "Group2", "Group3", "Group4", 
                              "Group5", "Group6", "Group7"}; // String array for parent list text views
public String [][]childList = {
        {
            "Child1", "Child2", "Child3", "Child4"
        },
        {
            "Child1", "Child2"
        },
        {
            "Child1", "Child2"
        },
        {
            "Child1", "Child2", "Child3"
        },
        {
            "Child1", "Child2", "Child3"
        },
        {
            "Child1"
        },
        {
            "Child1", "Child2", "Child3"
        }

}; // String array for child list text views
public String[][] dataObjectList = {
            {
                "1", "2", "3", "4"
            },
            {
                "2348", "2442"
            },
            {
                "1", "2"
            },
            {
                "1", "2", "3"
            },
            {
                "24234", "23432", "6567"
            },
            {
                "1"
            },
            {
                "1", "2", "3"
            }
};

private ArrayList<String> groupStrings;
private ArrayList<ArrayList<String>> itemStrings;
private ArrayList<ArrayList<String>> dataObjectStrings;

public ConfigAdapter()
{
    assert "Default constructor not used." != null; // Assert to prompt not to use this constructor.
}

public ConfigAdapter(Activity refActivity) 
{
    activity = refActivity;

    groupStrings = new ArrayList<String>();
    itemStrings = new ArrayList<ArrayList<String>>();
    dataObjectStrings = new ArrayList<ArrayList<String>>();
}

public void setGroupStrings(ArrayList<String> refGroupStrings)
{
    groupStrings = refGroupStrings;
}

public void setItemStrings(ArrayList<String> refItemStrings)
{
    itemStrings.add(refItemStrings);
}

public void setDataObjectStrings(ArrayList<String> refDataObjectStrings)
{
    dataObjectStrings.add(refDataObjectStrings);
}

public ArrayList<String> getGroupStrings()
{
    return groupStrings;
}

public ArrayList<ArrayList<String>> getItemStrings()
{
    return itemStrings;
}

public ArrayList<ArrayList<String>> getDataObjectStrings()
{
    return dataObjectStrings;
}

@Override
public Object getChild(int groupPosition, int childPosition) 
{
    return null;
}

@Override
public long getChildId(int groupPosition, int childPosition) 
{
    return 0;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 
{
    LayoutInflater childLayoutInflater = (LayoutInflater) activity.getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View childView = childLayoutInflater.inflate(R.layout.config_child_list_view, null);
    TextView itemTextView = (TextView) childView.findViewById(R.id.configListTextView1);
    itemTextView.setText(itemStrings.get(groupPosition).get(childPosition));
    //itemTextView.setText(childList[groupPosition][childPosition]);
    final ViewSwitcher childViewSwitcher = (ViewSwitcher) childView.findViewById(R.id.configListViewSwitcher);
    final TextView dataObjectTextView = (TextView) childViewSwitcher.findViewById(R.id.configListTextView2);
    dataObjectTextView.setText(dataObjectStrings.get(groupPosition).get(childPosition));
    //dataObjectTextView.setText(dataObjectList[groupPosition][childPosition]);
    System.out.println("Group position: " + groupPosition);
    System.out.println("Child position: " + childPosition);
    System.out.println("Data object list: " + dataObjectList.length);
    final EditText dataObjectEditText = (EditText) childViewSwitcher.findViewById(R.id.configEditText1);
    dataObjectEditText.setHint("hello");

    childViewSwitcher.setOnClickListener(new OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            if(childViewSwitcher.getCurrentView() == dataObjectTextView)
            {
                childViewSwitcher.showNext();
            }

        }
    });
    {

    }

    return childView;
}

@Override
public int getChildrenCount(int groupPosition) 
{
    return childList[groupPosition].length;
}

@Override
public Object getGroup(int groupPosition) 
{
    return groupPosition;
}

@Override
public int getGroupCount() 
{
    return groupList.length;
}

@Override
public long getGroupId(int groupPosition) 
{
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
{
    TextView tvParent = new TextView(activity);
    tvParent.setText(groupStrings.get(groupPosition));
    //tvParent.setText(groupList[groupPosition];
    tvParent.setPadding(10, 20, 10, 20);
    tvParent.setTextSize(18);
    tvParent.setTypeface(null, Typeface.BOLD); // Sets text to bold

    return tvParent;
}

@Override
public boolean hasStableIds() 
{
    return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) 
{
    return true;
}

}

2 个答案:

答案 0 :(得分:1)

转到此reference link

它会帮助你。

答案 1 :(得分:0)

尝试thisthis,但我知道还有很多其他线程在堆栈溢出时有相同的问题。