2015-10-05 120 views
0

当我按下“添加按钮”时,我想添加更多的LinearLayout在一个空的列表中。当我按下“添加按钮”时添加LinearLayout

当我第一次按“它工作”,空的LinearLayout表明我想但如果我再次按下按钮不起作用(LogCat显示我出现NullPointerException)。我发现它不是在前一个之下创建一个新的LinearLayout,也不知道如何解决它。

让我告诉你我的代码部分:

首先,我创建

static int ID=0; 
... 
LinearLayout mLayout []= new LinearLayout[10]; 
... 

的OnCreate:

... 
mLayout[ID] = (LinearLayout) findViewById(R.id.linearLayout_expandir); 
... 

然后:

private OnClickListener onClick() { 
     // TODO Auto-generated method stub 
     return new OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        mLayout[ID].addView(createNewTextView("Contain: ", ID)); 
        mLayout[ID].addView(createNewEditText(ID)); 
        mLayout[ID].addView(createNewTextView("Nº Liter: ",ID)); 
        mLayout[ID].addView(createNewEditText(ID)); 
        ID++;     
       } 
     }; 
    } 

XML:(此LinearLayout为空:否EditText,B uttons等,是另一个的LinearLayout内)

(从其他LinearLayouts更多的代码)

<LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="0.66" 
      android:orientation="horizontal" 
      android:id="@+id/linearLayout_expandir"> 
</LinearLayout> 

(更多的代码来自其他LinearLayouts)

谢谢您的时间!

回答

0

我为您创建了一个解决方案。此活动有一个按钮,可为您生成布局。我使用arraylist而不是数组,但想法是一样的。

这是一直在用这个演示创造了许多嵌套布局的图片。 Screenshot

一旦你在你的项目中得到了这段代码,你将不得不添加你提到的TextView/Edit Text代码。如果您有任何问题,请告诉我。 :)

public class LinearLayoutActivity extends Activity { 

    /*This linear layout is the first container*/ 
    LinearLayout outerMostLayout; 
    /*This array holds the linear layouts that you will create dynamically*/ 
    List<LinearLayout> subLayouts; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_linear_layout); 


     // Initialize your views 
     outerMostLayout = (LinearLayout) findViewById(R.id.container_layout); 
     subLayouts = new ArrayList<LinearLayout>(); 
     Button button = (Button) findViewById(R.id.button); 

     // Set the button onclick 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // Get a reference to the container layout 
       LinearLayout container = outerMostLayout; 
       if (!subLayouts.isEmpty()) { 
        // Check to see if we have created any yet new containers yet 
        //-- If we have, then use the newest container 
        container = subLayouts.get(subLayouts.size() - 1); 
       } 

       // Initialize the new layout with padding to show the change 
       LinearLayout linearLayout = new LinearLayout(LinearLayoutActivity.this); 
       linearLayout.setOrientation(LinearLayout.VERTICAL); 
       LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(
         android.widget.LinearLayout.LayoutParams.MATCH_PARENT, 
         android.widget.LinearLayout.LayoutParams.MATCH_PARENT); 
       linearLayout.setLayoutParams(linearLayoutParams); 
       linearLayout.setPadding(16, 16, 16, 16); 

       // Add textview with linear layout name 
       TextView textView1 = new TextView(LinearLayoutActivity.this); 
       textView1.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT)); 
       textView1.setText("Linear Layout: " + (subLayouts.size() + 1)); 
       textView1.setBackgroundColor(0xff66ff66); // hex color 0xAARRGGBB 
       linearLayout.addView(textView1); 


       // Add the layout to the array 
       subLayouts.add(linearLayout); 

       // Set the color of the new layout so that we can see the change 
       int size = subLayouts.size(); 
       if (size % 2 == 0) { 
        // Every even layout will be blue 
        linearLayout.setBackgroundColor(getResources().getColor(R.color.blue)); 
       } else { 
        // every odd layout will be red 
        linearLayout.setBackgroundColor(getResources().getColor(R.color.red)); 
       } 

       // Finally, add the linear layout to the container layout 
       container.addView(linearLayout); 
      } 
     }); 
    } 
} 

这里是布局XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@color/red" 
       android:orientation="vertical" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin"> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Generate"/> 

    <LinearLayout 
     android:id="@+id/container_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/blue" 
     android:orientation="horizontal" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin"> 
    </LinearLayout> 

</LinearLayout> 
+0

非常感谢。有用。 现在,我将在水平方向添加每个LinearLayout我的TextView和EditText。 – Ruslan

+0

欢迎您!你会接受吗?让我知道你是否需要任何帮助。 – Caleb

1

一个问题:你只有1的LinearLayout,你为什么要创建的LinearLayout数组,而你没有添加其他的LinearLayout到的LinearLayout?

的错误时,ID成为1,mLayout[1]尚未初始化和你想另一个视图添加到它可能发生。

LinearLayout expandir = (LinearLayout) findViewById(R.id.linearLayout_expandir); 
在onclick()方法

public void onClick(View v) { 
    LinearLayout linearLayout = new LinearLayout(context); 
    linearLayout.addView(createNewTextView("Contain: ", ID)); 
    linearLayout.addView(createNewEditText(ID)); 
    linearLayout.addView(createNewTextView("Nº Liter: ",ID)); 
    linearLayout.addView(createNewEditText(ID)); 
    expandir.addView(linearLayout); 
    ID++;     
} 
+0

如果我使用'LinearLayout mLayout; '当我多次按下按钮时,TextView和EditText保持在mLayout中。像这样 [TextView EditText TextView EditText; TextView EditText TextView EditText ....] 我想要一个新的布局,当我按下按钮多数民众赞成在我创建一个数组,但不知道如何获取和设置资源XML: '[TextView EditText TextView EditText] mLayout [0]' '[TextView EditText TextView EditText ] mLayout [1]' – Ruslan

+0

我已经更新了我的答案,希望工程:) – Wilik