添加新片段后,Android会滚动到底部

时间:2015-05-13 08:34:54

标签: android android-fragments android-scrollview

我有一个带有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;或类似的东西,但如何解决它,我不是很确定。

1 个答案:

答案 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()是必要的,但是如果添加了视图,那么它应该可行。