Android 滚动时未绘制子视图?

Android 滚动时未绘制子视图?,android,scroll,android-linearlayout,Android,Scroll,Android Linearlayout,我实现了一个代码来执行自动水平滚动,并使用postDelay定时器保持滚动继续 要开始滚动,我正在使用: private void startScrolling() { handler.postDelayed(new Runnable() { public void run() { counter = (int) (counter + 10); handler.postDelayed(th

我实现了一个代码来执行自动水平滚动,并使用postDelay定时器保持滚动继续

要开始滚动,我正在使用:

private void startScrolling() {

        handler.postDelayed(new Runnable() {
            public void run() {

                counter = (int) (counter + 10);
                handler.postDelayed(this, 100);

                    viewCount++;

                    if(viewCount == MAX_CHILD) {
                        viewCount = 0;
                        resetViewPosition(0);
                    }

                    llParent.scrollTo(counter , 0);
            }
        }, 1000L);
    }
最后,我删除了每个第一个视图,并再次添加它,因此它最终将以新的子视图的形式出现,使用:

private void resetViewPosition(int viewIndex) {

        View view = llParent.getChildAt(viewIndex);

        Log.v(TAG, "resetViewPosition : "+view.getId()+", "+llParent.getChildCount());
        llParent.removeViewAt(viewIndex);
        llParent.addView(view);
    }
问题:在这个过程中,最初的一些视图功能正常,但很快下一个子视图就不可见了。仍然在运行添加/删除进程,并且我正在resetViewPosition(..)中正确获取索引id。它只是子视图没有绘制


请建议我如何在父视图滚动时添加和显示视图?

如前所述替换此:

private void resetViewPosition(int viewIndex) {

        View view = llParent.getChildAt(viewIndex);

        Log.v(TAG, "resetViewPosition : "+view.getId()+", "+llParent.getChildCount());
        llParent.removeViewAt(viewIndex);
        llParent.addView(view);
    }
为此:

private void resetViewPosition(int viewIndex) {

  View view = llParent.getChildAt(0);
  attachViewToParent (view, MAX_CHILD+1, llParent);
  detachViewFromParent (0);
}

这是一种异常情况,因为您的方法使用了
getChildAt()
removeViewAt()
方法,这显然会留下一些空的
视图。我认为这可以记录为票证。

如前所述,替换为:

private void resetViewPosition(int viewIndex) {

        View view = llParent.getChildAt(viewIndex);

        Log.v(TAG, "resetViewPosition : "+view.getId()+", "+llParent.getChildCount());
        llParent.removeViewAt(viewIndex);
        llParent.addView(view);
    }
为此:

private void resetViewPosition(int viewIndex) {

  View view = llParent.getChildAt(0);
  attachViewToParent (view, MAX_CHILD+1, llParent);
  detachViewFromParent (0);
}

这是一种异常情况,因为您的方法使用了
getChildAt()
removeViewAt()
方法,这显然会留下一些空的
视图。我认为这可以被记录为一张票证。

正如我所看到的,在函数
resetViewPosition(int-viewIndex)
中,您将在位置viewIndex获取子视图,然后将其从索引位置移除,最后使用
llParent.addView(view)将第一个视图设置在“队列”底部,但是,您正在使用
resetViewPosition(0)调用函数-因此,您已经删除了该视图,并再次尝试执行该过程。您应该使用迭代器i=0%MAXCHILD更改对函数的调用。因为我已经删除了索引0视图。所以在第二次迭代中,第二个视图将是我的0索引视图…这就是我的想法?再次添加视图后,我得到的子视图总数为10,n仅在最后一个索引处删除项目。我使用日志进行了确认。您实际有多少子视图?我的意思是,新的子项按顺序添加了下一个索引,因此您应该删除0、1、2、3等,然后重新使用您的方法,但我认为对
resetViewPosition()
的调用是不正确的。尝试使用迭代器(内部计数器)调用它,它计算
viewCount=0的次数已执行。因此,当删除o索引视图时,下一个视图将自动成为第一个视图…不是吗?请尝试此操作,它无法解决此问题,但会为我们提供有价值的信息:
view view view=llParent.getChildAt(0);attachViewToParent(视图,最大子视图+1,最小父视图);detachViewFromParent(0)所有这些都在
resetViewPosition()
中。正如我所看到的,在函数
resetViewPosition(int-viewIndex)
中,您将在位置viewIndex获取子视图,然后将其从索引位置移除,最后使用
llParent.addView(view)在“队列”底部设置第一个视图,但是,您正在使用
resetViewPosition(0)调用函数-因此,您已经删除了该视图,并再次尝试执行该过程。您应该使用迭代器i=0%MAXCHILD更改对函数的调用。因为我已经删除了索引0视图。所以在第二次迭代中,第二个视图将是我的0索引视图…这就是我的想法?再次添加视图后,我得到的子视图总数为10,n仅在最后一个索引处删除项目。我使用日志进行了确认。您实际有多少子视图?我的意思是,新的子项按顺序添加了下一个索引,因此您应该删除0、1、2、3等,然后重新使用您的方法,但我认为对
resetViewPosition()
的调用是不正确的。尝试使用迭代器(内部计数器)调用它,它计算
viewCount=0的次数已执行。因此,当删除o索引视图时,下一个视图将自动成为第一个视图…不是吗?请尝试此操作,它无法解决此问题,但会为我们提供有价值的信息:
view view view=llParent.getChildAt(0);attachViewToParent(视图,最大子视图+1,最小父视图);detachViewFromParent(0)所有这些都在
resetViewPosition()
中。