我想创建一个函数,它接收一个文本数组并创建按钮并将它们添加到视图中。
这是我的代码。
它正在工作并创建按钮,但是当我调用该功能两次时,它不会创建两个线性布局,它只显示最后一个被调用,就好像它正在删除第一个。·
如何创建新的线性布局并将其添加到视图中?
// Create a view
protected boolean CreateTheButtons(String[] names)
{
try
{
LinearLayout linLayout = new LinearLayout(this);
linLayout.setOrientation(LinearLayout.HORIZONTAL);
LayoutParams linLayoutParam = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
// set LinearLayout as a root element of the screen
linLayout.setWeightSum(names.length);
setContentView(linLayout, linLayoutParam);
LayoutParams lpView = new LayoutParams(0, LayoutParams.WRAP_CONTENT);
lpView.weight = 1;
for (int i = 0; i < names.length; i++) {
Button btn = new Button(this);
btn.setText(names[i]);
linLayout.addView(btn, lpView);
}
return true;
}
catch(Exception ex)
{
return false;
}
}
答案 0 :(得分:1)
正在工作并创建按钮,但是当我调用该功能时 两次它没有创建两个线性布局,它只显示最后一个 被称为删除第一个。
您的代码会删除因调用该方法而产生的第一个LinearLayout
,因为您使用setContentView()
(将使用您作为传递的视图替换活动的当前视图(如果找到)参数)。相反,您应该删除对setContentView()
的调用,并为您计划通过该方法添加的LinearLayouts
插入一个持有者ViewGroup。
<!-- This will be the content view of the activity -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/parent" />
在onCreate()
方法中将上面的布局设置为活动的内容视图:
setContentView(R.layout.the_layout_above);
在方法中,您将拥有:
protected boolean CreateTheButtons(String[] names) {
try {
LinearLayout linLayout = new LinearLayout(this);
linLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams linLayoutParam = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
linLayout.setWeightSum(names.length);
// assuming this method is in an Activity
LinearLayout parent = (LinearLayout) findViewById(R.id.parent);
parent.addView(linLayout, linLayoutParam);
LayoutParams lpView = new LayoutParams(0, LayoutParams.WRAP_CONTENT);
lpView.weight = 1;
for (int i = 0; i < names.length; i++) {
Button btn = new Button(this);
btn.setText(names[i]);
linLayout.addView(btn, lpView);
}
return true;
} catch(Exception ex) {
return false;
}
}