BaseExpandableListAdapter的奇怪行为

时间:2014-08-05 20:00:02

标签: android expandablelistview expandablelistadapter

我有一个ExpandableListView,我正在使用适配器来扩展布局XML中的组和子行。在我的孩子XML中,我有3个文本视图:名称,注释和金额。我想要的是: 如果孩子的对象数量> 1在适当的文本视图中显示它;将注释文本视图的文本设置为子项的详细信息字段,但如果详细信息字符串为空 - 使视图消失。

所以我在我的适配器中有这个代码:

public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {

    final ChildHolder child_holder;

    if(convertView == null)
    {
        convertView = LayoutInflater.from(context).inflate(R.layout.row_selected_item_packed, null);
        child_holder = new ChildHolder();
        child_holder.tv_si_name = (TextView) convertView.findViewById(R.id.tv_packed_item_name);
        child_holder.tv_si_notes = (TextView) convertView.findViewById(R.id.tv_packed_item_notes);
        child_holder.tv_si_amount = (TextView) convertView.findViewById(R.id.tv_packed_item_amount);
        child_holder.img_packed = (ImageView) convertView.findViewById(R.id.img_packed);
        convertView.setTag(child_holder);
    } else {
        child_holder = (ChildHolder) convertView.getTag();
    }

    final Selected_Group selected_group = arr_selected_groups.get(groupPosition);
    final Selected_Item selected_item = selected_group.getArr_selected_items().get(childPosition);

    if(selected_item!=null)
    {
        child_holder.tv_si_name.setText(selected_item.getItem_name());

        //Here starts the problem
        child_holder.tv_si_notes.setText(selected_item.getSelected_item_details());
        if(selected_item.getSelected_item_details().equals(""))
        {
            child_holder.tv_si_notes.setVisibility(View.GONE);
        }
        if(selected_item.getSelected_item_amount()>1)
        {
            child_holder.tv_si_amount.setText(String.valueOf(selected_item.getSelected_item_amount()));
        }

        if(selected_item.isSelected_item_packed())
        {
            child_holder.img_packed.setImageDrawable(context.getResources().getDrawable(R.drawable.check_box_packed));
        } else {
            child_holder.img_packed.setImageDrawable(context.getResources().getDrawable(R.drawable.check_box_unchecked));
        }
    }

    return convertView;
}

class ChildHolder{
    TextView tv_si_name;
    TextView tv_si_notes;
    TextView tv_si_amount;
    ImageView img_packed;
}

目前我只有1个孩子,其金额> 1(其余的都有1个)和详细信息。但这是发生的事情:

  1. 所有笔记文字视图都消失了。如果我删除if语句 - 它们出现并且文本设置在适当的子项中。
  2. 首先,我在正确的孩子身上有正确的金额。但是,如果我关闭该组并重新打开它 - 突然另一个孩子有相同的数量(如果来自#1的if语句消失了 - 那么细节也会被复制到那个孩子。如果我打开另一个组 - 我也会看到其中一个孩子的金额。所以最终如果我继续打开和关闭小组,我将在每个孩子的金额文本视图中有金额。
  3. 为什么会发生这种情况?如何解决?

1 个答案:

答案 0 :(得分:0)

尝试这样..

child_holder.tv_si_notes.setVisibility(View.GONE);
if(selected_item.getSelected_item_details().equals(""))
{
   child_holder.tv_si_notes.setVisibility(View.GONE);
}
else
{
   child_holder.tv_si_notes.setVisibility(View.VISIBLE);
}