2015-05-13 15 views
6

Ho un'app con un LinearLayout a cui i frammenti rettangolari vengono aggiunti l'un l'altro nel tempo dall'alto verso il basso.Android scorrere verso il basso dopo l'aggiunta di un nuovo frammento

Ad un certo punto lo schermo è pieno ei nuovi frammenti sono "nascosti" al di fuori della vista dello schermo. Quello che mi piacerebbe fare è quindi far scorrere l'App verso il basso ogni volta che viene aggiunto un nuovo frammento.

Un frammento viene aggiunto ogni volta che viene premuto un pulsante nell'attività o viene selezionata una casella di controllo nel frammento precedente. Così ho cercato quanto segue nei onClickListeners e nel onCreateView dei frammenti:

 fm.beginTransaction().add(R.id.activity_uhf_layout, fragment).commit(); //Adding fragment 



     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       scrollView.scrollTo(0, scrollView.getBottom()); 
      }}); 

Questo funziona a volte, si aggiunge il frammento e lo schermo scorre verso il basso, ma è come 1/8 volte.

Ho provato altre cose come ad esempio:

 scrollView.post(new Runnable() { 
     @Override 
     public void run() { 
      scrollView.scrollTo(0, scrollView.getBottom()); 
      } 
     }); 

che dà sostanzialmente lo stesso risultato e ho provato senza il palo Runnable, che non funziona affatto.

Il risultato che sto ottenendo è che il layout viene solo spostato verso il basso fino al fondo del frammento che è già presente e non completamente fino alla fine del nuovo frammento che è stato appena aggiunto dal gestore di frammenti.

Per me sembra che anche se il frammento è stato aggiunto, il LayoutManager non ha realmente "rilevato" o qualcosa di simile, ma come aggirarlo, non ne sono veramente sicuro.

+0

Hai provato [questo] (http://stackoverflow.com/a/4294319/4428462)? Potrebbe essere necessario fare qualcosa come 'listView.setTranscriptMode (ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL)' e 'listView.setStackFromBottom (true);'. – JonasCz

+0

Non l'ho fatto ma dal momento che non sto usando Listview per i miei frammenti, non penso davvero che sarebbe di aiuto. Tuttavia, potrebbe essere l'unica soluzione per passare da LinearLayout all'utilizzo di ListView. – HANSEMINATOR

+0

"_got un'app con listview_" Ah, non stai usando un ListView attuale, a quanto pare. Metterei i miei frammenti in un ListView, invece di usare ScrollView. Poiché stai usando ScrollView, prova [this] (http://stackoverflow.com/a/13860258/4428462), usando 'scrollview.fullScroll (ScrollView.FOCUS_DOWN);' in una eseguibile. – JonasCz

risposta

0

Si potrebbe anche provare a farlo.

fm.executePendingTransactions(); 
runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
//Linearlayout is the layout the fragments are being added to. 
View view = linearLayout.getChildAt(linearLayout.getChildCount()-1); 
scrollView.scrollTo(0, view.getY() + view.getHeight()); 
}}); 

Non so che i executePendingTransactions() è necessario, ma se è stata aggiunta la vista, quindi che dovrebbe funzionare.

Problemi correlati