为什么smoothScroll在添加兄弟RelativeLayout后不能立即工作

时间:2014-09-22 09:31:30

标签: android scroll relativelayout

我在 ScrollView(SV)中有父 RelativeLayout(RL)。在父RL中我有一个孩子也是RL。我想将另一个子RL添加到父RL并向下滚动屏幕高度

RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(this.width,
   this.height);
lparams.addRule(RelativeLayout.BELOW, first_child.getId());
new_layout.setLayoutParams(lparams);
rl.addView(new_layout);
int current_pos = sv.getScrollY();
sv.smoothScrollTo(0,current_pos + this.height);

新的子RL已成功添加到父级,但 smootScrollTo 方法无法正常工作。它就像 addView()方法是异步工作的,当方法 smoothScrollTo 正在调用时,父RL还没有包含新的子RL。

如何在父母中添加新的子RL并立即向下滚动屏幕?

2 个答案:

答案 0 :(得分:6)

试试这个:

RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(this.width,
       this.height);
    lparams.addRule(RelativeLayout.BELOW, first_child.getId());
    new_layout.setLayoutParams(lparams);
    rl.addView(new_layout);
    int height = this.height;
        sv.post(new Runnable() {
                @Override
                public void run() {
                    int current_pos = sv.getScrollY();
                    sv.smoothScrollTo(0,current_pos + height);
                }
            });

答案 1 :(得分:1)

以下代码可以使用:

            final int scrollposition = Math.round(hr/24.0f * 1440f);

            final ScrollView sv = (ScrollView)findViewById(R.id.graphScrollView);
            //sv.smoothScrollTo(0, scrollposition);

            sv.post(new Runnable() {
                @Override
                public void run() {
                    sv.smoothScrollTo(0, scrollposition);
                }
            });

<强>原因: 在运行底层代码之前,它将等待滚动视图发布。