2015-05-13 20 views
6

Mam aplikację z LinearLayout, do której prostokątne fragmenty są dodawane poniżej siebie w czasie od góry do dołu.Android przewiń do dołu po dodaniu nowego fragmentu.

W pewnym momencie ekran jest pełny, a nowe fragmenty są "ukryte" poza widokiem ekranu. Chciałbym wtedy, aby aplikacja była przewijana do dołu za każdym razem, gdy dodawany jest nowy fragment.

Fragment jest dodawany za każdym razem, gdy przycisk w działaniu jest wciśnięty lub zaznaczone jest pole wyboru w powyższym fragmencie. Więc Próbowałem następujących w onClickListeners aw onCreateView fragmentów:

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



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

Działa to czasami fragment dodaje i przewija ekran w dół, ale jego jak 1/8 razy.

Próbowałem innych rzeczy, takich jak:

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

co w zasadzie daje ten sam wynik i próbowałem bez Runnable postu, który nie działa w ogóle.

Rezultatem jest to, że układ jest przewijany tylko do dołu fragmentu, który już jest obecny, a nie aż do końca nowego fragmentu, który został właśnie dodany przez menedżer fragmentów.

Wydaje mi się, że pomimo dodania fragmentu, LayoutManager tak naprawdę "nie wykrył tego" lub czegoś podobnego, ale jak go obejść, nie jestem do końca pewien.

+0

Czy próbowałeś [to] (http://stackoverflow.com/a/4294319/4428462)? Może być konieczne zrobienie czegoś w stylu 'listView.setTranscriptMode (ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL)' i 'listView.setStackFromBottom (true);'. – JonasCz

+0

Nie, ale ponieważ nie używam Listview dla moich fragmentów, naprawdę nie sądzę, żeby to pomogło. Jednak może to być jedyne wyjście z LinearLayout do korzystania z ListView. – HANSEMINATOR

+0

"_got aplikacja z listview_" Ah, nie używasz rzeczywistego ListView, wydaje się. Umieściłbym moje fragmenty wewnątrz ListView, zamiast używać ScrollView. Ponieważ używasz Scrollview, spróbuj [to] (http://stackoverflow.com/a/13860258/4428462), stosując 'scrollview.fullScroll (ScrollView.FOCUS_DOWN);' w sposób runnable. – JonasCz

Odpowiedz

0

Możesz także spróbować tego dokonać.

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()); 
}}); 

nie wiem, że executePendingTransactions() jest konieczne, ale jeśli widok został dodany, to powinno działać.

Powiązane problemy