【问题标题】:Dynamically adding buttons into a table or grid like form layout programmatically以编程方式将按钮动态添加到表格或网格中,例如表单布局
【发布时间】:2016-03-24 18:38:15
【问题描述】:

我已经解决这个问题有一段时间了。 我希望收集最热门的关键字并将其放入 ArrayList。 每个关键字都将放置在一个切换按钮上(用户选择关键字并增强搜索)。我需要按钮在 Android 移动应用程序上以网格形式出现,我还需要将按钮放置在 ArrayList 中,以便稍后参考。我尝试了很多不同的循环,for 循环和循环中的循环,并不断遇到同样的两个问题:

问题 1) 如果我在布局循环中创建按钮,则关键字未读取或在每列中重复。
问题 2)我先创建按钮,然后在布局循环中引用它们,我收到一条错误消息:

“java.lang.IllegalStateException: 指定的孩子已经有一个父母。你必须先在孩子的父母上调用removeView()”

我已经扫描了互联网,我尝试了不同的方法,我认为这只是我的代码中缺少的东西(这一层代码是许多层之一,这一层包含按钮......任何指针都会不胜感激。

        trending = new ArrayList<String>() {
        {
            add("one"); add("two"); add("three") ;add("four");add("five");
            add("six");add("seven");add("eight");add("nine");add("ten");
            add("eleven");
        }};

    //LAYOUT SETTINGS 5
    TableLayout rLayout5 = new TableLayout(this);
    rLayout5.setOrientation(TableLayout.VERTICAL);
    LayoutParams param7 = new LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT);
    param7.addRule(RelativeLayout.BELOW, rLayout4.getId());
    rLayout5.setBackgroundColor(Color.parseColor("#EEEBAA"));

    rLayout5.setLayoutParams(param7);
   // List<ToggleButton> togButtStore = new ArrayList<ToggleButton>();

    int i = 0 ;
    while (i < trending.size()){
        if (i % 3 == 0){
          tr = new TableRow(this);
            rLayout5.addView(tr);
        }
        toggBtn = new ToggleButton(this);
        toggBtn.setText(trending.get(i));
        toggBtn.setId(i);
        toggBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //something here
            }
        });
        tr.addView(toggBtn);
        i++;
    }
    rLayout5.addView(tr);   ///<---error points to this line
    root.addView(rLayout1);
    rLayout1.addView(text1);
    root.addView(rLayout4);
    root.addView(rLayout3);
    root.addView(rLayout5);
    setContentView(root);
}

【问题讨论】:

  • 您将 tr 添加到 rLayout5 两次。删除错误所在的行......
  • 哦不,哈哈!我也确实在 for 循环中尝试过,我得到了相同的错误消息,所以当我在 while 循环中尝试它并得到完全相同的错误消息时,我直接进入堆栈受够了。我整天都在改组重写代码,所以错过了简单的事情。感谢它现在完美运行

标签: android button dynamic parent-child android-tablelayout


【解决方案1】:

您将 tr 添加到 rLayout5 两次。删除错误所在的行......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2015-02-08
    • 1970-01-01
    相关资源
    最近更新 更多