我有一个带有LinearLayout的应用程序,从上到下,随着时间的推移,矩形片段会逐渐添加到其中。
在某些时候屏幕已满,新片段被隐藏了#34;在屏幕视图之外。我想做的是每次添加新片段时都要将应用滚动到底部。
每次按下活动中的按钮或检查上面片段中的复选框时,都会添加一个片段。 所以我在onClickListeners和片段的onCreateView上尝试了以下内容:
fm.beginTransaction().add(R.id.activity_uhf_layout, fragment).commit(); //Adding fragment
runOnUiThread(new Runnable() {
@Override
public void run() {
scrollView.scrollTo(0, scrollView.getBottom());
}});
这有时会起作用,片段会被添加并且屏幕会向下滚动,但它会像1/8次一样。
我尝试过其他事情,例如:
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.scrollTo(0, scrollView.getBottom());
}
});
这基本上给出了相同的结果,并且我在没有Runnable帖子的情况下尝试过,这根本不起作用。
我得到的结果是,布局只会向下滚动到已经存在的片段的底部,而不是一直到片段管理器刚刚添加的新片段的末尾。 。
对我来说似乎即使添加了片段,LayoutManager也没有真正地检测到它#34;或类似的东西,但如何解决它,我不是很确定。
答案 0 :(得分:0)
您也可以尝试这样做。
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());
}});
我不知道executePendingTransactions()是必要的,但是如果添加了视图,那么它应该可行。