2015-10-05 123 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