簡體   English   中英

BaseExpandableListAdapter 中的不可擴展項

[英]Non-expandable item in BaseExpandableListAdapter

我有三個組類型,TYPE_SEPARATOR、TYPE_EXAM、TYPE_HOMEWORK,后兩個我需要擴展 onClick 工作正常。 我不想膨脹 TYPE_SEPARATOR 的視圖,但我正在努力找出如何實現這一點。 任何回應將不勝感激。 此適配器使用 BaseExpandableListAdapter。

這是用於 childViews

@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;
}

這是用於 groupViews

@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_SEPARATOR類型的項目返回 0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM