Есть два приёма. Возможно, они вам помогут.
1. Попробуйте отображать данные не сразу, а помещая их в очередь UI потока:
public View getView( final int i, final View convertView, final ViewGroup parent ){
View row;
if( convertView == null ){
// creating
} else{
row = convertView;
}
final SomeClass idOfDataCell;
final SomeClass2 data;
final SomeView dataView = (SomeView)row.findViewById( R.id.id );
// init idOfDataCell, data
row.setTag( idOfDataCell );
row.post( new Runnable (){
@Override public void run ( ) {
if( dataView.getTag().equals( idOfDataCell )){
dataView.setData( data );
}
}
});
return row;
}
2.Отображайте часть данных после остановки прокрутки:
SomeAdapter adapter = new SomeAdapter();
listView.setOnScrollListener( new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged ( AbsListView view,int scrollState ){
if( scrollState == 2 ){
realtyListAdapter.scrolling( true );
} else{
realtyListAdapter.scrolling( false );
realtyListAdapter.notifyDataSetChanged();
}
}
} );
listView.setAdapter( adapter );
class SomeAdapter extends BaseAdapter {
private boolean scrolling;
public void scrolling( boolean scrolling ){
this.scrolling = scrolling;
}
@Override
public View getView( final int position, final View convertView, final ViewGroup parent ){
if( scrolling ) /* отобразить часть данных */;
else /* отобразить все данные */ ;
return null;
}
}