Java BaseExpandableListAdapter中的不可扩展项

Java BaseExpandableListAdapter中的不可扩展项,java,android,listview,expandablelistview,Java,Android,Listview,Expandablelistview,我有三种分组类型,类型分隔符,类型考试,类型家庭作业,后两种我需要扩展onClick,这很好。我不想为TYPE_SEPARATOR膨胀视图,但我正在努力找出如何实现它。如有任何回复,将不胜感激。此适配器正在使用BaseExpandableListAdapter 这是给孩子们看的 @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View con

我有三种分组类型,类型分隔符,类型考试,类型家庭作业,后两种我需要扩展onClick,这很好。我不想为TYPE_SEPARATOR膨胀视图,但我正在努力找出如何实现它。如有任何回复,将不胜感激。此适配器正在使用BaseExpandableListAdapter

这是给孩子们看的

@Override
public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
        View v = convertView;
        LayoutInflater vi;
        int type = getGroupType(groupPosition);
        days = 0;

        switch (type){
            case TYPE_SEPARATOR:
                    v = null;
                break;
            case TYPE_EXAM:
                Exam exam = (Exam) objects.get(groupPosition);
                if (v == null) {
                    vi = context.getLayoutInflater();
                    v = vi.inflate(R.layout.expandeditem, null);
                    holder.tV_expandedItem_days = (TextView) v.findViewById(R.id.tV_expandedItem_days);
                    holder.tV_expandedItem_grade = (TextView) v.findViewById(R.id.tV_expandedItem_grade);
                    v.setTag(holder);
                } else {
                    holder = (ViewHolder) v.getTag();
                }

                formatter = DateTimeFormat.forPattern("dd MMM YYYY");
                now = new DateTime();
                objectDate = DateTime.parse(exam.getDate(), formatter);
                d = Days.daysBetween(now, objectDate);
                days = d.getDays() + 1; 
                if (days > 0){
                    holder.tV_expandedItem_days.setText(String.valueOf(days) + " days to go");

                }                   
                else {
                    days = days * -1;
                    holder.tV_expandedItem_days.setText(String.valueOf(days) + " days ago");
                }

                holder.mark = exam.getMark();
                holder.maxMark = exam.getMaxMark();
                if (exam.getMaxMark() > 0) {
                    holder.tV_expandedItem_grade.setVisibility(View.VISIBLE);
                    holder.percentage = (holder.mark / holder.maxMark) * 100;
                    holder.tV_expandedItem_grade.setText(new Grade().get(holder.percentage));
                } else {
                    holder.tV_expandedItem_grade.setText("?");
                }                   

                break;
            case TYPE_HOMEWORK:
                Homework homework = (Homework) objects.get(groupPosition);
                if (v == null) {
                    vi = context.getLayoutInflater();
                    v = vi.inflate(R.layout.expandeditem, null);
                    holder.tV_expandedItem_days = (TextView) v.findViewById(R.id.tV_expandedItem_days);
                    holder.tV_expandedItem_grade = (TextView) v.findViewById(R.id.tV_expandedItem_grade);
                    v.setTag(holder);
                } else {
                    holder = (ViewHolder) v.getTag();
                }

                formatter = DateTimeFormat.forPattern("dd MMM YYYY");
                now = new DateTime();
                objectDate = DateTime.parse(homework.getDate(), formatter);
                d = Days.daysBetween(now, objectDate);
                days = d.getDays() + 1; 
                if (days > 0){
                    holder.tV_expandedItem_days.setText(String.valueOf(days) + " days to go");

                }
                else {
                    days = days * -1;
                    holder.tV_expandedItem_days.setText(String.valueOf(days) + " days ago");
                }   

                holder.mark = homework.getMark();
                holder.maxMark = homework.getMaxMark();

                if (homework.getMaxMark() > 0) {
                    holder.percentage = (holder.mark / holder.maxMark) * 100;
                    holder.tV_expandedItem_grade.setText(new Grade().get(holder.percentage));
                } else {
                    holder.tV_expandedItem_grade.setText("?");
                }

                break;
        }

        return v;
}
这是用于组视图的

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    View v = convertView;
    int type = getGroupType(groupPosition);
    holder = new ViewHolder();
    LayoutInflater vi;
    switch (type) {
        case TYPE_SEPARATOR:
            if (v == null) {
                vi = context.getLayoutInflater();
                v = vi.inflate(R.layout.completedseparator, null);
            } else {
                holder = (ViewHolder) v.getTag();
            }
            break;
        case TYPE_EXAM:
            if (v == null) {
                vi = context.getLayoutInflater();
                v = vi.inflate(R.layout.examitem, null);

                holder.tV_title = (TextView) v.findViewById(R.id.tV_title);
                holder.tV_startTime = (TextView) v.findViewById(R.id.tV_startTime);
                holder.tV_date = (TextView) v.findViewById(R.id.tV_date);
                holder.tV_grade = (TextView) v.findViewById(R.id.tV_grade);

                holder.tV_grade.setVisibility(View.GONE);
                holder.tV_title.setEllipsize(TruncateAt.MARQUEE);
                holder.tV_title.setSelected(true);

                v.setTag(holder);
            } else {
                holder = (ViewHolder) v.getTag();
            }

            holder.exam = (Exam) objects.get(groupPosition);

            if ((holder.exam != null)) {
                holder.tV_title.setText(holder.exam.getTitle());
                holder.tV_startTime.setText(holder.exam.getStartTime());
                holder.tV_date.setText(holder.exam.getDate());
                holder.tV_title.setText(holder.exam.getTitle());
                holder.tV_startTime.setText(holder.exam.getStartTime());
                holder.tV_date.setText(holder.exam.getDate());
            }

            break;
        case TYPE_HOMEWORK:
            if (v == null) {
                vi = context.getLayoutInflater();
                v = vi.inflate(R.layout.homeworkitem, null);

                holder.tV_homework_subject = (TextView) v
                        .findViewById(R.id.tV_homework_subject);
                holder.tV_homework_description = (TextView) v
                        .findViewById(R.id.tV_homework_description);
                holder.tV_homework_date = (TextView) v
                        .findViewById(R.id.tV_homework_date);
                holder.tV_homework_grade = (TextView) v
                        .findViewById(R.id.tV_homework_grade);
                holder.tV_homework_time = (TextView) v
                        .findViewById(R.id.tV_homework_time);

                holder.tV_homework_grade.setVisibility(View.GONE);
                holder.tV_homework_description.setEllipsize(TruncateAt.MARQUEE);
                holder.tV_homework_description.setSelected(true);

                v.setTag(holder);
            } else {
                holder = (ViewHolder) v.getTag();
            }

            holder.homework = (Homework) objects.get(groupPosition);

            holder.tV_homework_subject.setText(holder.homework.getSubject());
            holder.tV_homework_description.setText(holder.homework.getDescription());
            holder.tV_homework_date.setText(holder.homework.getDate());
            holder.tV_homework_time.setText(holder.homework.getTime());

            break;
    }
    return v;
}
编辑

我的适配器的问题是getChildrenCount方法始终返回1。这是新方法

@Override
public int getChildrenCount(int groupPosition) {
    int count = 0;
    if (objects.get(groupPosition).getClass().equals(String.class)) {
        count = 0;
    }
    if (objects.get(groupPosition).getClass().equals(Exam.class)) {
        count = 1;
    }
    if (objects.get(groupPosition).getClass().equals(Homework.class)) {
        count = 1;
    }
    return count;
}

谢谢提琴手帮了我的忙

您需要确保您的
getChildrenCount()
方法为
type\u SEPARATOR
类型的项返回0

我不希望SEPARATOR视图(type\u SEPARATOR)在有人单击它时膨胀子视图。目前它是这样的,我必须膨胀一些视图,否则它会因nullPointerException而崩溃。你能发布你的
getChildrenCount
方法吗?您确定类型为_SEPARATOR的项目返回0吗?啊!非常感谢。我的getChildrenCount方法总是返回1,所以现在修复了这个问题,它可以正常工作了。谢谢!酷:)我当时把它作为答案贴了出来,这样你就可以接受了