以编程方式将按钮动态添加到 table 或类似表单布局的网格中
Dynamically adding buttons into a table or grid like form layout programmatically
我在这个问题上已经有一段时间了。
我希望收集最热门的关键字并将其放入 ArrayList 中。
每个关键字都将放在一个切换按钮上,(用户选择关键字并增强搜索)。我需要按钮在 Android 移动应用程序上以类似网格的形式出现,我还需要将按钮放置在 ArrayList 中,以便稍后参考。我尝试了很多不同的循环,for 循环和 loops in loop 并不断遇到同样的两个问题:
可能 1) 如果我在布局循环中创建按钮,则关键字未被读取或在每列中重复出现。
概率 2) 我先创建按钮,然后在布局循环中引用它们,我收到一条错误消息:
"java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first"
我浏览了互联网,尝试了不同的方法,我认为它只是我的代码中缺少的东西(这一层代码是许多层之一,这一层包含按钮......任何将不胜感激。
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);
}
您正在向 rLayout5 添加 tr 两次。删除错误所在的行....
我在这个问题上已经有一段时间了。 我希望收集最热门的关键字并将其放入 ArrayList 中。 每个关键字都将放在一个切换按钮上,(用户选择关键字并增强搜索)。我需要按钮在 Android 移动应用程序上以类似网格的形式出现,我还需要将按钮放置在 ArrayList 中,以便稍后参考。我尝试了很多不同的循环,for 循环和 loops in loop 并不断遇到同样的两个问题:
可能 1) 如果我在布局循环中创建按钮,则关键字未被读取或在每列中重复出现。
概率 2) 我先创建按钮,然后在布局循环中引用它们,我收到一条错误消息:
"java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first"
我浏览了互联网,尝试了不同的方法,我认为它只是我的代码中缺少的东西(这一层代码是许多层之一,这一层包含按钮......任何将不胜感激。
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);
}
您正在向 rLayout5 添加 tr 两次。删除错误所在的行....