Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保持滚动视图滚动到底?_Java_Android - Fatal编程技术网

Java 如何保持滚动视图滚动到底?

Java 如何保持滚动视图滚动到底?,java,android,Java,Android,我有一个滚动视图,里面有一个线性布局,我正在添加文本视图。但是我总是希望最后添加的TextView是可见的,所以当添加TextView时,我需要ScrollView滚动到底部。我不知道为什么,但当我在添加textview后调用scrollto()、scrollby()或fullScroll()时,它只会在最后一个之前滚动到textview 你知道更好的方法吗 非常感谢 代码: 我有一个按钮,它调用这个函数: private void addRound() { // TODO Auto-g

我有一个滚动视图,里面有一个线性布局,我正在添加文本视图。但是我总是希望最后添加的TextView是可见的,所以当添加TextView时,我需要ScrollView滚动到底部。我不知道为什么,但当我在添加textview后调用scrollto()、scrollby()或fullScroll()时,它只会在最后一个之前滚动到textview

你知道更好的方法吗

非常感谢

代码:

我有一个按钮,它调用这个函数:

private void addRound() {
    // TODO Auto-generated method stub
    TextView newRound = new TextView(Stopwatch.this);
    newRound.setText("" + counter + ". - " + timerText());
    newRound.setTextSize(20);
    newRound.setGravity(Gravity.CENTER);
    linlay.addView(newRound);
    counter++;
}
调用此函数后,我调用fullScroll()


sv是我的ScrollView,linlay是ScrollView内部的线性布局。

我想这是因为在调用sv.scrollFull(View.FOCUS\u DOWN)时,ScrollView没有完全更新尝试以下操作(替换第二个代码示例):

如果上述方法不起作用,请尝试以下方法(这不是一种优雅的方法,但可能有效):


希望这能奏效

另一种方法是使用ViewTreeObserver.OnGlobalLayoutListener。在onCreate()方法中添加此代码段


为此,您可能应该使用ListView并使用list.setSelection(int-index);很简单。我可以将ListView缩小为布局的一部分吗?我们可以看看您用于确定滚动到何处以及实际滚动滚动视图的代码吗?当然,请稍等,我会编辑我的原始postyes ListView可以是其他内容的一部分-例如另一个垂直线性布局。我想这是你在游戏回合中花费的时间。对的您可能应该将此信息保存在数据库中。首先更新数据库,然后将数据检索到listview并刷新它。第一个选项运行良好,似乎没有显著的性能问题,非常感谢!没有完全更新。就这样!终于解决了我的问题。不需要postDelayed,正常的帖子就足够了。谢谢你,postDelayed代码对我一直有效,第一个代码只是有时候有效。
addRound();
sv.fullScroll(View.FOCUS_DOWN);
addRound();
sv.post(new Runnable() {

   @Override
   public void run() {
     sv.fullScroll(View.FOCUS_DOWN);
   }
});
addRound();
sv.postDelayed(new Runnable() {

   @Override
   public void run() {
     sv.fullScroll(View.FOCUS_DOWN);
   }
}, 100);
    linlay.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            sv.fullScroll(View.FOCUS_DOWN);
        }
    });