Android ScrollView滚动

时间:2015-10-08 07:44:18

标签: android scrollview layout-inflater

我正在开发一个项目,我的ScrollView包含一个linearlayout。

<ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#9e9e9e"
            android:layout_weight="2"
            android:id="@+id/scrollview_llChatContainer"
            android:layout_above="@+id/relativeLayout">


            <LinearLayout
                android:id="@+id/llChatContainer"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:animateLayoutChanges="true"
                android:orientation="vertical"
                android:background="#cccccc">

            </LinearLayout>
        </ScrollView>

我在我的代码中夸大了这个linearlayout。最后的结果看起来更像是listView。以下是我如何给LinearLayout充气。

public void populateMessages(List<Message> messagesList){
        inflater.inflate(R.layout.inc_message_layout, llChatContainer, false);
            imageLoader.displayImage(message.imageuser, (ImageView)messageLayout.findViewById(R.id.imageView));
            }

            if(!message.image.equalsIgnoreCase("")){
                imageLoader.displayImage(message.image, (ImageView)messageLayout.findViewById(R.id.rivMsgImageN));
            }

            TextView tv = (TextView)messageLayout.findViewById(R.id.tvMsgTextN);
            tv.setText(message.text);
            llChatContainer.addView(messageLayout);
        }
    }

现在填充列表时,我希望scrollView滚动到LinearLayout的底部。我尝试了两种我找到的方法。

   scroller.post(new Runnable() { 
        public void run() { 
            scroller.fullScroll(ScrollView.FOCUS_DOWN); 
        } 
    });

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

上述解决方案均不适合我。 Linearlayout按预期填充,但scrollview甚至没有滚动。

还有其他方法可以完成这项工作吗? 感谢。

2 个答案:

答案 0 :(得分:0)

这是由时间问题引起的,尝试滚动一点延迟,使用此代码

       scroller.postDelayed(new Runnable() {
        public void run() {
            scroller.fullScroll(ScrollView.FOCUS_DOWN);
        }
    }, 10L);

答案 1 :(得分:0)

在调用scroller.scrollTo(0,linearlayout.getBottom());后使用scroller.scrollTo(0,linearlayout.getHeight());populateMessages()ScrollView的孩子正在改变它的价值,而不是ScrollView本身。