2015-05-13 16 views
6

Tôi đã có một Ứng dụng có LinearLayout để các đoạn hình chữ nhật được thêm vào dưới mỗi khác theo thời gian từ trên xuống dưới.Cuộn Android xuống dưới cùng sau khi đoạn mới được thêm

Tại một số thời điểm màn hình đầy và các đoạn mới bị "ẩn" bên ngoài màn hình của màn hình. Những gì tôi muốn làm sau đó là làm cho ứng dụng cuộn xuống dưới mỗi khi một đoạn mới được thêm vào.

Một đoạn được thêm vào mỗi khi một nút trong hoạt động được đẩy hoặc hộp kiểm trong đoạn trên được chọn. Vì vậy, tôi đã thử các sau đây trong onClickListeners và trong onCreateView của các mảnh vỡ:

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



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

này hoạt động đôi khi, những mảnh vỡ được thêm vào và cuộn màn hình xuống, nhưng nó giống như 1/8 lần.

Tôi đã thử những thứ khác như:

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

Mà về cơ bản cung cấp cho các kết quả tương tự và tôi đã cố gắng mà không có bài Runnable, mà không làm việc ở tất cả.

Kết quả tôi nhận được là bố cục chỉ được cuộn xuống dưới cùng của đoạn đã có và không phải tất cả các con đường xuống đến cuối đoạn mới vừa được thêm vào bởi trình phân đoạn.

Với tôi có vẻ như mặc dù đoạn được thêm vào, LayoutManager không thực sự "phát hiện ra nó" hoặc một cái gì đó tương tự, nhưng làm thế nào để có được xung quanh nó, tôi không thực sự chắc chắn về.

+0

Bạn đã thử [this] (http://stackoverflow.com/a/4294319/4428462) chưa? Bạn có thể cần phải làm một cái gì đó như 'listView.setTranscriptMode (ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL)' và 'listView.setStackFromBottom (true);'. – JonasCz

+0

Tôi chưa nhưng vì tôi không sử dụng Listview cho các mảnh vỡ của mình, tôi thực sự không nghĩ nó sẽ giúp ích gì. Tuy nhiên, nó có thể chỉ là giải pháp duy nhất để chuyển từ LinearLayout sang sử dụng ListView. – HANSEMINATOR

+0

"_got một ứng dụng với một listview_" Ah, bạn không sử dụng một ListView thực tế, có vẻ như. Tôi sẽ đặt các mảnh của mình bên trong một ListView, thay vì sử dụng một ScrollView. Vì bạn đang sử dụng ScrollView, hãy thử [this] (http://stackoverflow.com/a/13860258/4428462), bằng cách sử dụng 'scrollview.fullScroll (ScrollView.FOCUS_DOWN);' trong một runnable. – JonasCz

Trả lời

0

Bạn cũng có thể thử thực hiện việc này.

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

Tôi không biết rằng executePendingTransactions() là cần thiết, nhưng nếu chế độ xem đã được thêm, thì điều đó sẽ hoạt động.

Các vấn đề liên quan