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

HAN*_*TOR 6 android android-fragments android-scrollview

我有一个带有LinearLayout的应用程序,从上到下,随着时间的推移,矩形片段会在下面添加.

在某些时候屏幕已满,新片段被"隐藏"在屏幕视图之外.我想要做的是每次添加新片段时使应用程序滚动到底部.

每次按下活动中的按钮或检查上面片段中的复选框时,都会添加一个片段.所以我在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());
            }});
Run Code Online (Sandbox Code Playgroud)

这有时会起作用,片段会被添加并且屏幕会向下滚动,但它会像1/8倍一样.

我尝试过其他的东西,比如:

        scrollView.post(new Runnable() {
        @Override
        public void run() {
            scrollView.scrollTo(0, scrollView.getBottom());
            }
        });
Run Code Online (Sandbox Code Playgroud)

这基本上给出了相同的结果,我试过没有Runnable帖子,这根本不起作用.

我得到的结果是布局只向下滚动到已经存在的片段的底部,而不是一直到片段管理器刚刚添加的新片段的末尾.

对我来说,似乎即使添加了片段,LayoutManager也没有真正"检测到它"或类似的东西,但是如何绕过它,我不是很确定.

cha*_*ith 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());
}});
Run Code Online (Sandbox Code Playgroud)

我不知道executePendingTransactions() 是必要的,但如果已添加视图,那么这应该可以工作。