2012-11-22 26 views
0

我有三個組類型,TYPE_SEPARATOR,TYPE_EXAM,TYPE_HOMEWORK,後兩個我需要擴大它的onClick是工作的罰款。我不想誇大TYPE_SEPARATOR的視圖,但我正在努力找出如何實現這一點。任何迴應將不勝感激。此適配器使用BaseExpandableListAdapter。不可擴展項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; 
} 

感謝小提琴幫助我!

+0

問題是什麼這麼遠嗎? – fiddler

+0

我不想分離器視圖(TYPE_SEPARATOR)當有人點擊它膨脹子視圖。目前它確實如此,我不得不誇大一些視圖,否則它會因nullPointerException異常而崩潰。 – jaggedspike

+0

你可以發佈你的'getChildrenCount'方法嗎?你確定它返回0類型TYPE_SEPARATOR的項目嗎? – fiddler

回答

1

你需要確保你的getChildrenCount()方法TYPE_SEPARATOR類型的物品返回0。