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.
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
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
"_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