ho un idea, provo ad implementarla e edito, dovrebbe funzionare

ok spettacolo:)
allora una mia entry della lv è un oggetto di tipo risorsa, come per te è di tipo esame credo
a questo oggetto aggiungiamo un campo
int expanded;e quando istanziamo l'oggetto mettiamo
expanded = 0;ora nel nostro on item click prima di espandere o ridurre facciamo una cosa del tipo
if (resources.get(arg2).expanded==0){
resources.get(arg2).expanded=1;
}
else
{
resources.get(arg2).expanded=0;
}bene ora sappiamo se è espanso o ridotto , ora sistemiamo l'adapter
View v = convertView;
Log.i("adapter", "position"+position);
Resource o = items.get(position);
if (v == null) {
Log.i("adapter", "item "+items.size());
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.resource, null);
}
else
{
LinearLayout l2 = (LinearLayout)v.findViewById(R.id.notexpanded);
l2.setVisibility(View.VISIBLE);
LinearLayout ll = (LinearLayout)v.findViewById(R.id.expanded);
ll.setVisibility(View.GONE);
}
if (o != null) {
if(o.expanded==1)
{
LinearLayout l2 = (LinearLayout)v.findViewById(R.id.notexpanded);
l2.setVisibility(l2.getVisibility()==View.GONE ? View.VISIBLE : View.GONE);
LinearLayout ll = (LinearLayout)v.findViewById(R.id.expanded);
ll.setVisibility(ll.getVisibility()==View.GONE ? View.VISIBLE : View.GONE);
}
//qui tutto il resto dell'adapterse trovi qualcosa di più performante dimmi ma sembra che così non dia problemi