有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java动态地向FlipperView添加文本视图,并使用不同的滚动方式

我正在开发一个应用程序,几周前开始学习Java。在这一点上,我正努力去做一些事情,但我不知道出了什么问题

因此,问题如下。我有一个FlipperView,我想在其中动态添加文本视图,我应该能够在它们之间导航。这些文本视图具有相同的内容和布局,它们之间唯一的区别是它们的“ScrollY”属性。我希望第一个文本视图有一个0的滚动条,以便可以从它的开头看到文本。然后,我希望下一个TextView有一个0+x的滚动条,其中x是TextView的高度(最初定义为match_parent)。下一个应该有一个2x的卷轴,等等

为了得到这份工作,我做了很多努力。首先,我使用一个。邮递现在,我可以更改第一个文本视图的滚动条。对于其他视图,我使用For a循环。此时,文本视图已正确创建,我可以使用FlipperView在它们之间导航。但是,setScroly函数在for循环中不起作用。我尝试用一个任意整数代替TextView的动态高度来填充它,但没有成功,所以我猜在这种情况下函数根本不起作用。这是我的代码(循环的数量目前是固定的):

public int formatText(Context context, ViewFlipper textFlipper) {
    int nbOfViews = 1;
    final int[] viewMaxHeight = {0};
    final int[] lineSpacing = {0};

    textContent = context.getResources().getString(R.string.dummyText);

    final TextView flipperView = new TextView(context, null, R.style.flipperText);

    flipperView.setText(textContent);

    textFlipper.addView(flipperView);

    flipperView.post(new Runnable() {
        @Override
        public void run() {
            viewMaxHeight[0] = flipperView.getHeight();
            lineSpacing[0] = Math.round(flipperView.getLineSpacingExtra());
        }
    });

    for(int i = 0; i < 2; i++) {
        TextView flipperViewExtra = new TextView(context, null, R.style.flipperText);
        flipperViewExtra.setText(textContent);
        flipperViewExtra.setScrollY(viewMaxHeight[0] * nbOfViews + lineSpacing[0]);

        textFlipper.addView(flipperViewExtra);

        nbOfViews++;
    }

    return nbOfViews;
}

感谢您的帮助,谢谢


共 (1) 个答案

  1. # 1 楼答案

    您使用的是THREAD,THREAD倾向于通过缓存变量来优化性能。因此,线程之外的任何机会都不会“看到”内存中的更改。要强制线程查看内存中的更改,必须将变量声明为volatile。范例

    final volatile int[] viewMaxHeight = {0};
    final volatile int[] lineSpacing = {0};