Кристиан был правильным (и если бы он отправил его в качестве ответа, я бы просто принял его;)).
Решение заключалось в том, чтобы создать собственный адаптер, который оказался довольно простым, хотя при настройке видимости элемента есть несколько исправлений. В принципе, вы должны устанавливать его каждый раз, независимо от того, скрываете ли вы его или делаете его видимым. В противном случае вы обнаружите, что разные элементы списка внезапно отображают скрытый элемент, когда они не должны, или наоборот, при прокрутке списка. Вот несколько примеров кода:
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);
}
}
}
Это скрывает все описания. Есть ли способ установить его на лету в адаптере? – anakin78z 2010-12-07 01:10:55
+1 @anakin создать свой собственный адаптер. – Cristian 2010-12-07 01:20:48