2015-05-13 10 views
6

Ich habe eine App mit einem LinearLayout, zu dem rechteckige Fragmente im Laufe der Zeit von oben nach unten hinzugefügt werden.Android nach unten scrollen, nachdem neues Fragment hinzugefügt wurde

An einem bestimmten Punkt ist der Bildschirm voll und die neuen Fragmente sind außerhalb der Ansicht des Bildschirms "versteckt". Was ich dann tun möchte, ist, die App jedes Mal, wenn ein neues Fragment hinzugefügt wird, nach unten zu scrollen.

Ein Fragment wird jedes Mal hinzugefügt, wenn eine Schaltfläche in der Aktivität gedrückt wird oder ein Kontrollkästchen im obigen Fragment aktiviert ist. Also habe ich versucht, die folgenden in den onClickListeners und im onCreateView der Fragmente:

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



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

Das funktioniert manchmal wird das Fragment hinzugefügt und scrollt der Bildschirm nach unten, aber es ist wie 1/8 mal.

Ich habe andere Dinge ausprobiert, wie:

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

die im Grunde das gleiche Ergebnis gibt und ich habe ohne die Runnable Post versucht, die überhaupt nicht funktionieren.

Das Ergebnis ist, dass das Layout nur bis zum Ende des Fragments gescrollt wird, das bereits vorhanden ist, und nicht bis zum Ende des neuen Fragments, das gerade vom Fragmentmanager hinzugefügt wurde.

Für mich scheint es, dass, obwohl das Fragment hinzugefügt wird, der LayoutManager hat es nicht wirklich "entdeckt" oder etwas ähnliches, aber wie man es umgehen kann, bin ich mir nicht wirklich sicher.

+0

Haben Sie versucht [dies] (http://stackoverflow.com/a/4294319/4428462)? Eventuell müssen Sie etwas wie 'listView.setTranscriptMode (ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL)' und 'listView.setStackFromBottom (true);'. – JonasCz

+0

Ich habe nicht, aber da ich Listview für meine Fragmente nicht verwende, glaube ich nicht wirklich, dass es helfen würde. Es könnte jedoch die einzige Lösung sein, um von LinearLayout zur Verwendung von ListView zu wechseln. – HANSEMINATOR

+0

"_got eine App mit einem Listview_" Ah, Sie verwenden nicht eine tatsächliche ListView, so scheint es. Ich würde meine Fragmente in eine ListView einfügen, anstatt eine ScrollView zu verwenden. Versuchen Sie [this] (http://stackoverflow.com/a/13860258/4428462), ScrollView zu verwenden, indem Sie scrollview.fullScroll (ScrollView.FOCUS_DOWN); in einer ausführbaren Datei verwenden. – JonasCz

Antwort

0

Sie könnten auch versuchen, dies zu tun.

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

Ich weiß nicht, dass die executePendingTransactions() ist notwendig, aber wenn die Ansicht hinzugefügt wurde, arbeitet das soll dann.

Verwandte Themen