Как не дать пустым элементам TextView занимать слишком много места в списке? - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть ExpandableListView с большим количеством детей. Некоторые из детей состоят из названия и описания, а некоторые не имеют описания. Я использую SimpleExpandableListAdapter, и макет для детей состоит из двух элементов TextView в LinearLayout.

Проблема, с которой я столкнулся, заключается в том, что пустые описания все еще занимают место, создавая слишком большой интервал между элементами, у которых нет описаний.

Есть ли способ скрыть второй TextView на лету в адаптере или настроить макет так, чтобы пустой TextView не занимал никакого пространства?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 07 июня 2011

Кристиан был прав (и если бы он отправил это как ответ, я бы просто принял это;)).

Решением было создание собственного адаптера, который оказался довольно простым, хотя при настройке видимости элемента есть несколько ошибок. По сути, вы должны устанавливать его каждый раз, независимо от того, скрываете ли вы его или делаете видимым. В противном случае вы обнаружите, что разные элементы списка внезапно отобразят скрытый элемент, когда они не должны, или наоборот, при прокрутке списка. Вот пример кода:

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

}
1 голос
/ 07 декабря 2010

Попробуйте установить видимость на View.GONE

0 голосов
/ 27 марта 2012

Кажется, что также установка Fave.setHeight (0) поможет вашему адаптеру.

...