[Demonstration 1]

[Buggy Method]
@Override
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    final String children = (String) getChild(groupPosition, childPosition);
    TextView text = null;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.listrow_details_cursos, null);
    }
    text = (TextView) convertView.findViewById(R.id.textView5);
    text.setText(children);
    return convertView;
}

[Buggy Hunk]
text = (TextView) convertView.findViewById(R.id.textView5);

[Patch]
text = (TextView) convertView.findViewById(R.id.coursename_text);

[Demonstration 2]

[Buggy Method]
public static boolean moveKing(Field field, Move move) {
    Point start = move.getStart();
    Point dest = move.getDestination();
    // doesnt check if field is threatend
    if (possibleMovesInitialised = true) {
        return (Math.abs(start.x - dest.x) <= 1 && Math.abs(start.y - dest.y) <= 1 && !aOnField(field, move));
    } else {
        boolean ok = possibleMoves(field, start, move.getFigure()).contains(dest);
        System.out.println("get in here");
        return (Math.abs(start.x - dest.x) <= 1 && Math.abs(start.y - dest.y) <= 1 && !aOnField(field, move) && ok);
    }
    // Destination within one Field of the Start
}

[Buggy Hunk]
if(possibleMovesInitialised = true){

[Patch]
if(possibleMovesInitialised == true){

[Demonstration 3]

[Buggy Method]
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    //TODO  不是一个好的方法 强制重绘  getView 复用的不是当前GroupItem下的childView 这样会导致存储的Checked状态乱序（Child的id不是唯一的了。）
    //TODO 而是 前面显示过的GroupItem的ChildView 这样的话 设置的Tag值就没办法保持唯一性就不能记录 CheckBox状态了。待解决。
    convertView = null;
    final ChildViewHolder holder;
    final ShoppingCarData.Product goodData = (Product) getChild(groupPosition, childPosition);
    if (convertView == null) {
        holder = new ChildViewHolder();
        convertView = mInflater.inflate(R.layout.item_shopping_car_list, null);
        holder.mCheck = (CheckBox) convertView.findViewById(R.id.item_shopping_car_list_cb_check);
        holder.mCount = (TextView) convertView.findViewById(R.id.item_shopping_car_list_tv_number);
        holder.mDate = (TextView) convertView.findViewById(R.id.item_shopping_car_list_tv_date);
        holder.mPrice = (TextView) convertView.findViewById(R.id.item_shopping_car_list_tv_price);
        holder.mPlus = (ImageButton) convertView.findViewById(R.id.item_shopping_car_list_iv_plus);
        holder.mMinus = (ImageButton) convertView.findViewById(R.id.item_shopping_car_list_iv_minus);
        holder.mName = (TextView) convertView.findViewById(R.id.item_shopping_car_list_tv_name);
        holder.mImage = (ImageView) convertView.findViewById(R.id.item_shopping_car_list_iv_image);
        //TODO 用了别人的一个仿饿了么的动画，但是跟全选 有冲突，
        //TODO 原因是 全选后要通知Adapter更新因为每次点击都要去判断是否全选每次都通知刷新，这个控件就会每点一次就进初始化。伸展不开。
        //holder.mShopping = (ShoppingView) convertView.findViewById(R.id.shopping_view);
        convertView.setTag(holder);
    } else {
        holder = (ChildViewHolder) convertView.getTag();
    }
    holder.mCheck.setChecked(goodData.isCheck);
    holder.mCheck.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            goodData.isCheck = holder.mCheck.isChecked();
            //TODO 通知接口更新
            mNotification.notification(groupPosition);
        }
    });
    holder.mDate.setText(goodData.weekname == null ? "" : goodData.weekname);
    holder.mName.setText(goodData.name == null ? "" : goodData.name);
    holder.mPrice.setText(goodData.price == null ? "0" : goodData.price);
    holder.mCount.setText(goodData.number + "");
    //加号
    holder.mPlus.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            holder.mCheck.setChecked(true);
            goodData.number++;
            goodData.isCheck = holder.mCheck.isChecked();
            holder.mCount.setText(goodData.number + "");
            //通知Activity计算价格
            mNotification.notification(groupPosition);
        }
    });
    //减号
    holder.mMinus.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (goodData.number > 1) {
                goodData.isCheck = holder.mCheck.isChecked();
                goodData.number--;
                holder.mCount.setText(goodData.number + "");
                //通知Activity计算价格
                mNotification.notification(groupPosition);
            }
        }
    });
    //        holder.mShopping.setOnShoppingClickListener(new ShoppingView.ShoppingClickListener() {
    //            @Override
    //            public void onAddClick(int num) {
    //                holder.mCheck.setChecked(true);
    //                goodData.number = num;
    //                goodData.isCheck = holder.mCheck.isChecked();
    //                //TODO 通知计算价格
    //                mNotification.notification(groupPosition);
    //            }
    //
    //            @Override
    //            public void onMinusClick(int num) {
    //                if (num < 1) return;
    //                goodData.number = num;
    //                goodData.isCheck = holder.mCheck.isChecked();
    //                //TODO 通知计算价格
    //                mNotification.notification(groupPosition);
    //            }
    //        });
    return convertView;
}

[Buggy Hunk]
final ShoppingCarData.Product goodData = (Product) getChild(groupPosition, childPosition);

[Patch]
final MealMenuData goodData = (MealMenuData) getChild(groupPosition, childPosition);