我有一个有很多孩子的 ExpandableListView。有些孩子包含标题和描述,而有些缺少描述。我使用 SimpleExpandableListAdapter,子项的布局由 LinearLayout 中的两个 TextView 项组成。
我遇到的问题是空的描述仍然占用空间,在没有描述的项目之间创建了太多的间距。
有没有办法在适配器中动态隐藏第二个 TextView,或者设置布局以使空的 TextView 不占用任何空间?
谢谢。
我有一个有很多孩子的 ExpandableListView。有些孩子包含标题和描述,而有些缺少描述。我使用 SimpleExpandableListAdapter,子项的布局由 LinearLayout 中的两个 TextView 项组成。
我遇到的问题是空的描述仍然占用空间,在没有描述的项目之间创建了太多的间距。
有没有办法在适配器中动态隐藏第二个 TextView,或者设置布局以使空的 TextView 不占用任何空间?
谢谢。
克里斯蒂安是正确的(如果他将其发布为答案,我会简单地接受它;))。
解决方案是创建我自己的适配器,结果证明它相当简单,尽管在设置元素的可见性时有一些陷阱。基本上,你必须每次都设置它,不管你是隐藏它还是让它可见。否则你会发现不同的列表元素会在不应该显示的时候突然显示隐藏元素,反之亦然,当滚动列表时。这是一些示例代码:
public class SpellListAdapter extends CursorAdapter {
private LayoutInflater mLayoutInflater;
private Context mContext;
public SpellListAdapter(Context context, Cursor c) {
super(context, c);
mContext = context;
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = mLayoutInflater.inflate(R.layout.list_item_fave, parent, false);
return v;
}
@Override
public void bindView(View v, Context context, Cursor c) {
String spell = c.getString(c.getColumnIndexOrThrow(SpellDbAdapter.KEY_SPELL));
int fave = c.getInt(c.getColumnIndexOrThrow(SpellDbAdapter.KEY_FAVORITE));
TextView Spell = (TextView) v.findViewById(R.id.text);
if (Spell != null) {
Spell.setText(spell);
}
//Set Fave Icon
TextView Fave = (TextView) v.findViewById(R.id.fave_icon);
//here's an important bit. Even though the element is set to invisible by
//default in xml, we still have to set it every time. Then, if the
//spell is marked as a favorite, set the view to visible.
Fave.setVisibility(View.INVISIBLE);
if (fave == 1){
Fave.setVisibility(View.VISIBLE);
}
}
}
尝试将可见性设置为View.GONE
似乎也设置 Fave.setHeight(0) 会在您的适配器中发挥作用。