0

Я пытаюсь динамически заполнять ExpandableListView с помощью ArrayList для группы представления и ArrayList> для представления элемента. Мне удалось заставить его работать, как я хочу, с фиксированными массивами String с фиктивными данными, но поскольку я все время буду иметь дело с этими объектами как ArrayLists, я хотел сохранить его таким образом. Я получаю IndexOutOfBoundsException: Недопустимый индекс 1, размер 1 на данный момент. Я пытался заставить это работать некоторое время, и я много раз искал и на самом деле не нашел никакой информации о нем, которая применима к тому, что я хочу делать, и как вы можете это сделать. Пожалуйста, кто-нибудь может помочь мне понять, что я делаю неправильно. Заранее спасибо.Как заполнить ExpandableListView с помощью ArrayList в Android

Вот код, и я сохранил фиксированные строки массивы, чтобы показать, что я хочу, как 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; 
} 

} 

ответ

1

К этому reference link

это вам поможет.

+0

Я пробовал это, и это имеет смысл для меня, но он по-прежнему сталкивается с той же ошибкой. Любой совет? –

+0

@JamesMeade Извините, если вы дадите мне некоторое время, я проверю его позже, потому что теперь я выйду –

+0

Большое спасибо. Я также выяснил, что я неправильно сделал свой метод и должен его проверить, чтобы исправить его. Я дам вам знать, исправляет ли это проблему или нет. –

0

Попробуйте this или this, но я знаю, что существует много других потоков с одним и тем же вопросом при переполнении стека.

Смежные вопросы