android - 使用 for 循环以编程方式将元素添加到 FrameLayout

标签 android

为什么当我将元素添加到 FrameLayout flCatScroll 时,仅显示一个而不是十个,它们可能重叠,或者为什么边距不增加。

    myactivity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            //Main Framelayout
            FrameLayout flCatScroll = (FrameLayout) myactivity.findViewById(R.id.flCatScroll);
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
            params.gravity = Gravity.TOP;
            params.topMargin = 20;

            for(int i = 0;  i < 10; i++) {
                //FrameLayout mainItemLayout = new FrameLayout(myactivity);
                listFramelayouts.add(new FrameLayout(myactivity));
            }
            for(int i = 0;  i < listFramelayouts.size(); i++) {
                params.topMargin = 20 * i;
                TextView itemName = new TextView(myactivity);
                itemName.setText("Test" + i);
                listFramelayouts.get(i).addView(itemName);
                flCatScroll.addView(listFramelayouts.get(i), params);
            }

        }
    });

最佳答案

引用语义再次出击!

因为您要重用 params 对象,而不是每次都创建一个新对象,所以无论您添加 View 时的边距是多少,它们最后都共享相同的边距。所以它们确实都是重叠的。

这有意义吗?

关于android - 使用 for 循环以编程方式将元素添加到 FrameLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31020220/

相关文章:

android - getMeasuredHeight() 和宽度在 measure() 之后返回 0

java - 即使设置了serialVersionUID,反序列化也会引发InvalidClassException

java - android textview 变量

Android MediaPlayer 不播放声音并且屏幕变黑

java - Android – AlarmManager 和 BroadcastReceiver 的问题

机器人 : option menu doesn't work correctly

android - 如何使用独立的 Jetifier 迁移到 AndroidX?

javascript - 如何创建内容 slider 的箭头(React-Native)?

java - 当我在其他 Activity 中使用 mqtt 客户端时,他们向我显示错误

android - Firebase 崩溃报告控制台 - 如何使用打开/关闭过滤器?