2017-05-27 56 views
0

我在ExpendableListView Adapter类中有两个数组,它们为我的组和子数据头提供了虚拟数据。第一个数组是一个常规数组,第二个数组是二维数组。如何动态地将数据添加到数组

public class ExpandableListViewAdapter extends BaseExpandableListAdapter { 

String[] groupNames = { 
     "Fall 2016", "Winter 2017", 
     "Fall 2017", "Winter 2018", 
     "Fall 2018", "Winter 2019", 
     "Fall 2019", "Winter 2020" 
}; 

String[][] childNames = { 
     {"JAVA101", "MATH101", "CHEM101"},{"JAVA201", "MATH201", "CHEM201"}, 
     {"JAVA301", "MATH301", "CHEM301"},{"JAVA401", "MATH401", "CHEM401"}, 
     {"JAVA501", "MATH501", "CHEM501"},{"JAVA601", "MATH601", "CHEM601"}, 
     {"JAVA701", "MATH701", "CHEM701"},{"JAVA801", "MATH801", "CHEM801"} 
}; 

而且根据需要,我已经实现了所有必需的方法,并将它们附加到我的数组中。

Context context; 

    public ExpandableListViewAdapter(Context context){ 
     this.context = context; 
    } 

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

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

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

    @Override 
    public Object getChild(int groupPosition, int childPosition) { 
     return childNames[groupPosition][childPosition]; 
    } 

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

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

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

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View view, ViewGroup parent) { 
     TextView textView = new TextView(context); 
     textView.setText(groupNames[groupPosition]); 
     textView.setPadding(100,0,0,0); 
     textView.setTextColor(Color.BLACK); 
     textView.setTextSize(20); 

     return textView; 
    } 

    @Override 
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup parent) { 
     final TextView textView = new TextView(context); 
     textView.setText("Java" + groupNames[childPosition] + "01"); 
     textView.setPadding(100,0,0,0); 
     textView.setTextColor(Color.BLACK); 
     textView.setTextSize(10); 

     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(context, textView.getText().toString(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     return textView; 
    } 

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

一切工作正常。我想要做的是通过FAB点击动态地将数据添加到我的ExpandableListView。我主要关心的是,如果我需要在适配器内实现我的FAB按钮的onClick()功能。

回答

0

数组的大小不能被修改。如果你想要一个更大的数组,你必须实例化一个新的数组。更好的解决方案是使用可在需要时增长的ArrayList

因此,在适配器中创建一个方法,将新项目添加到现有列表中。在该方法中,将新项目添加到ArrayList并调用.notifyDataSetChanged()

List<String> places = Arrays.asList("Fall 2016", "Winter 2017", "Fall 2017", "Winter 2018", "Fall 2018", "Winter 2019", "Fall 2019", "Winter 2020"); 

更换groupNames对于childNames你必须做这样

List<String[]> childNames = Arrays.asList(new String[]{"JAVA101", "MATH101", "CHEM101"}, new String[]{ "JAVA201", "MATH201", "CHEM201" } etc...); 

OR

List<String[]> childNames = new ArrayList<String[]>(); 
childNames.add(new String[]{"JAVA101", "MATH101", "CHEM101"}); 
//etc... 

你也必须改变你的适配器使用的ArrayList,而不是阵列,我希望你能明白

+0

如何更换两个数组(即使是2D的)一个数组列表? –

+0

编辑我的帖子用一个例子 – Denny

+0

在像'getGroup的实施方法()','getGroupView()','getChildView()'有喜欢的错误如下: '@覆盖 公共对象getGroup(INT groupPosition) {group 0}返回groupNames [groupPosition]; }' 现在'groupNames'不承认'INT groupPosition' –

0

首先要添加数据动态地使用ArrayList

  1. 没有必要的onclick执行();在适配器中添加来自活动的数据onclick
  2. 然后使用notifyDatasetchanged();在适配器上这将做诡计
相关问题