动态创建视图

时间:2014-10-02 07:04:18

标签: android

我想创建一个函数,它接收一个文本数组并创建按钮并将它们添加到视图中。

这是我的代码。

它正在工作并创建按钮,但是当我调用该功能两次时,它不会创建两个线性布局,它只显示最后一个被调用,就好像它正在删除第一个。·
如何创建新的线性布局并将其添加到视图中?

// 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;
     }




}

1 个答案:

答案 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;
     }

}