• Как сделать работу smoothScrollToPosition в ListView более плавной?

    @Bolloky
    Есть два приёма. Возможно, они вам помогут.
    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;
        }
    }
    Ответ написан
  • Как организовать хранение и передачу данных в приложении между Activity?

    @Bolloky
    Вполне можно гонять один и тот же Bundle. Это не трудозатратно и защитит от выгрузки, так как приложение запустится с того же места с тем же Intent.
    Bundle data = getIntent.getExtras();
    data.putString( "param100500", "ДЖИГУРДА" );
    Intent intent = new Intent( this, Activity100501.class );
    intent.putExtras( data );

    В дополнение к этому для надёжности можно унаследовать все Activity от родителя, где в методе onPause() ваш Bundle будет сохраняться в Preferences, а в onCreate восстанавливаться при savedInstanceState == null.
    Ответ написан
    Комментировать