我试图通过互联网找到我的答案的解决方案,但我找不到一个好的解决方案.我看了这个主题: Android ExpandableListView Child Headers,但它对我不起作用. 我现在拥有的(屏幕): 我的代码是: p
我现在拥有的(屏幕):
我的代码是:
private void fillData() { ExpandableListView lv; lv = (ExpandableListView) getActivity().findViewById(R.id.grades_view); lv.setItemsCanFocus(false); lv.setChoiceMode(ExpandableListView.CHOICE_MODE_SINGLE); View view = View.inflate(getActivity(), R.layout.list_header, null); lv.addHeaderView(view, null, false); dbh = new DatabaseHelper(getActivity()); MyExpandableListAdapter mAdapter = new MyExpandableListAdapter( getActivity(), dbh); mAdapter.synchronize(); lv.setAdapter(mAdapter); registerForContextMenu(lv); } public class MyExpandableListAdapter extends BaseExpandableListAdapter { private List<Subject> mSubjects = new ArrayList<Subject>(); private List<List<Course>> mCourse = new ArrayList<List<Course>>(); private DatabaseHelper dbh; private LayoutInflater inflater; public MyExpandableListAdapter(Context context, DatabaseHelper dbh) { this.dbh = dbh; this.inflater = LayoutInflater.from(context); } public void synchronize() { mSubjects = dbh.getSubjects(); for (Subject s : mSubjects) { mCourse.add(dbh.getCourses(s)); } } @Override public Object getChild(int groupPosition, int childPosition) { return mCourse.get(groupPosition).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return getChild(groupPosition, childPosition).hashCode(); } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { Course c = (Course) getChild(groupPosition, childPosition); if (convertView == null) convertView = inflater.inflate(R.layout.list_item_child, parent, false); TextView txt = (TextView) convertView.findViewById(R.id.code); txt.setText(c.getCode()); TextView txt1 = (TextView) convertView.findViewById(R.id.ects); txt1.setText(String.valueOf(c.getEcts())); TextView txt2 = (TextView) convertView.findViewById(R.id.grade); if (c.getGrade() == -1) { txt2.setText("-"); } else { txt2.setText(String.valueOf(c.getGrade())); } return convertView; } @Override public int getChildrenCount(int groupPosition) { return mCourse.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return mSubjects.get(groupPosition); } @Override public int getGroupCount() { return mSubjects.size(); } @Override public long getGroupId(int groupPosition) { return mSubjects.get(groupPosition).hashCode(); } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { Subject s = (Subject) getGroup(groupPosition); if (convertView == null) convertView = inflater.inflate(R.layout.list_item, parent, false); TextView txt1 = (TextView) convertView.findViewById(R.id.name); txt1.setText(String.valueOf(s.getName())); TextView txt2 = (TextView) convertView.findViewById(R.id.semester); txt2.setText(String.valueOf(s.getSemester())); return convertView; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }
我们可以看到,要使用我使用的第一级头(Name和Sem):
View view = View.inflate(getActivity(), R.layout.list_header, null); lv.addHeaderView(view, null, false);
但我不知道如何对孩子们这样做(带有Code,ECTS和Grade的标题).
先感谢您.
只需添加一个“额外的孩子”@Override public Object getChild(int groupPosition, int childPosition) { if (childPosition == 0) return null; return mCourse.get(groupPosition).get(childPosition - 1); } @Override public long getChildId(int groupPosition, int childPosition) { if (childPosition == 0) return 0; return getChild(groupPosition, childPosition).hashCode(); } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (childPosition == 0) { convertView = inflater.inflate(R.layout.list_item_child, null); // your special header return convertView; } // rest of your method }
你可以有不同的布局或任何你喜欢的地方.