2015-03-02 35 views
1

在我的應用程序中,我想要的是動態地添加按鈕到基於數組長度的線性佈局。例如,如果數組的長度是4,那麼應該將4個按鈕添加到線性layout.I試過這樣做,但總是我的應用程序崩潰,不能添加childs到linearLayout

的LinearLayout中是在XML的底部是我想添加按鈕

的XMl

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/bg"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/hsjobslogo" 
      android:layout_gravity="center" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" /> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/mrd_home" 
      android:layout_marginRight="10dp" 
      android:src="@drawable/home168" 
      android:layout_centerVertical="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 


    </RelativeLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:background="@drawable/header" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:id="@+id/linearLayout2"> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="33dp" 
      android:layout_weight="2" 
      android:layout_marginTop="04dp" 
      android:text="Resource" 
      android:gravity="center|start" 
      android:textColor="#fff" 
      android:textStyle="bold" 

      android:layout_marginLeft="10dp" 
      android:textSize="18sp" /> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.5" 
      android:padding="10dp" 
      android:visibility="gone" 
      android:layout_marginTop="-5dp" 
      android:src="@drawable/edit" /> 


    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="0.35" 


     android:visibility="visible" 
     android:id="@+id/ll_main_pi" 
     android:orientation="vertical"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:orientation="horizontal"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Name" 
       android:textStyle="bold" 


       style="@style/Job_on_Call" 
       android:textColor="#000" 
       android:id="@+id/tv_mrd_pi_name" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text=" [ " 

       style="@style/Job_on_Call" 
       android:singleLine="false" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Gender" 


       style="@style/Job_on_Call" 
       android:textColor="#000" 
       android:id="@+id/tv_mrd_gender" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="," 

       style="@style/Job_on_Call" 
       android:singleLine="false" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Age" 


       style="@style/Job_on_Call" 
       android:textColor="#000" 
       android:id="@+id/tv_mrd_age" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text=" ]" 

       style="@style/Job_on_Call" 
       android:singleLine="false" /> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 

      android:layout_marginLeft="10dp" 
      android:orientation="horizontal"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Profession" 


       style="@style/Job_on_Call" 
       android:textColor="#000" 
       android:id="@+id/tv_mrd_profession" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text=" [ " 

       style="@style/Job_on_Call" 
       android:singleLine="false" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Yrs" 


       style="@style/Job_on_Call" 
       android:textColor="#000" 
       android:id="@+id/tv_mrd_exp_yrs" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="." 

       style="@style/Job_on_Call" 
       android:singleLine="false" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Months" 


       style="@style/Job_on_Call" 
       android:textColor="#000" 
       android:id="@+id/tv_mrd_exp_months" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text=" ]" 

       style="@style/Job_on_Call" 
       android:singleLine="false" /> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:orientation="horizontal"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="" 


       style="@style/Job_on_Call" 
       android:singleLine="false" 
       android:layout_marginBottom="2dp" 
       android:id="@+id/tv_mrd_area" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="" 


       style="@style/Job_on_Call" 
       android:singleLine="false" 
       android:layout_marginBottom="2dp" 
       android:id="@+id/tv_mrd_city" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="" 


       style="@style/Job_on_Call" 
       android:singleLine="false" 
       android:layout_marginBottom="2dp" 
       android:id="@+id/tv_mrd_state" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="" 

       style="@style/Job_on_Call" 
       android:singleLine="true" 
       android:id="@+id/tv_mrd_country" /> 

     </LinearLayout> 


    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 


     > 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="1dp" 
      android:gravity="bottom" 
      android:layout_gravity="bottom" 
      android:background="@drawable/divider_light" 
      android:layout_weight="0.2" /> 


     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_weight="1.6" 

      android:layout_height="wrap_content" 
      android:background="@drawable/rectangle"> 

      <TextView 
       android:layout_width="0dp" 
       android:layout_weight="2" 
       android:layout_height="wrap_content" 
       android:text="Personal Info" 
       android:textStyle="bold" 
       android:textSize="18sp" 
       android:id="@+id/tv_mrd_header" 
       style="@style/Job_on_Call" 
       android:textColor="#fff" 
       android:layout_marginTop="05dp" 
       android:layout_marginLeft="19dp" /> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/plus_one" 
       android:visibility="gone" 
       android:layout_marginLeft="10dp" 
       android:layout_marginRight="5dp" 
       android:id="@+id/iv_mrd_add" /> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/edit_one" 
       android:visibility="visible" 
       android:layout_marginRight="5dp" 
       android:layout_marginLeft="10dp" 
       android:id="@+id/iv_mrd_edit" /> 


     </LinearLayout> 

    </LinearLayout> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1.5" 
     android:orientation="horizontal"> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.2" 
      android:padding="5dp" 
      android:id="@+id/iv_mrd_go_left" 
      android:src="@drawable/left_arrow" /> 

     <ViewFlipper 
      android:layout_width="0dp" 
      android:layout_weight="2" 
      android:layout_height="match_parent" 
      android:visibility="visible" 
      android:id="@+id/mrd_view_flipper" 
      android:layout_gravity="center_horizontal"> 


      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="horizontal" 
       android:layout_marginLeft="10dp" 
       android:layout_marginRight="10dp" 
       android:layout_marginTop="2dp" 
       android:id="@+id/ll_my_resource_personal_details"> 

       <LinearLayout 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:orientation="vertical" 
        android:layout_weight="2"> 

        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Nationality" 
         android:textStyle="bold" 
         android:id="@+id/tv_mrd_nationality_header" 
         android:layout_marginTop="02dp" 
         style="@style/Job_on_Call" 
         android:textColor="#000" /> 




       </LinearLayout> 


      </LinearLayout> 


      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical" 
       android:layout_marginLeft="10dp" 
       android:layout_marginRight="10dp" 
       android:layout_marginTop="2dp" 
       android:id="@+id/ll_my_resource_refference_details"> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Name" 
        android:textStyle="bold" 
        android:id="@+id/tv_mrd_ref_name_header" 
        android:layout_marginTop="02dp" 
        style="@style/Job_on_Call" 
        android:textColor="#000" /> 




      </LinearLayout> 

      <RelativeLayout 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_marginLeft="10dp"> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Document Type" 
        android:textStyle="bold" 
        android:id="@+id/dumm1" 
        android:layout_marginTop="05dp" 
        style="@style/Job_on_Call" 
        android:textColor="#000" /> 


      </RelativeLayout> 

      <RelativeLayout 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_margin="20dp"> 


       <ImageView 
        android:layout_width="200dp" 
        android:layout_height="200dp" 
        android:id="@+id/mrd_profile_pic" 
        android:layout_margin="10dp" 
        android:layout_centerVertical="true" 
        android:layout_centerHorizontal="true" /> 


      </RelativeLayout> 


     </ViewFlipper> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.2" 
      android:padding="5dp" 
      android:id="@+id/iv_mrd_go_right" 
      android:src="@drawable/right_arrow" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="0.2" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:id="@+id/add_doc_circles" 
     android:orientation="horizontal"> 


    The layout where i want to create buttons dynamically 


    </LinearLayout> 


</LinearLayout> 

代碼

if (NewDataSet.get("Table2") instanceof JSONArray) { 
           isDocPresent = true; 
           JSONArray array = NewDataSet.getJSONArray("Table2"); 
           numOfDocCircles = array.length(); 
           LayoutInflater layoutInflater; 
           Button button = new Button(context); 
           for (int k = 0; k < array.length(); k++) { 
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30, 30); 
            button.setLayoutParams(params); 
            button.setText("" + k); 
            llAddDocCircles.addView(button); 
           } 

錯誤

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

請幫我出什麼問題?

+0

這是一個很大的XML牆:D – Hemanth 2015-03-02 06:52:25

回答

1

將您的按鈕創建成for循環,在你的代碼,你基本上只需添加相同Button實例父佈局幾次:以下方法

for (int k = 0; k < array.length(); k++) { 
    Button button = new Button(context); 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(convertDpToPixel(30), convertDpToPixel(30)); 
    button.setLayoutParams(params); 
    button.setText("" + k); 
    llAddDocCircles.addView(button); 
} 

使用dp轉換爲pixel

public static float convertDpToPixel(float dp){ 
    Resources resources = context.getResources(); 
    DisplayMetrics metrics = resources.getDisplayMetrics(); 
    float px = dp * (metrics.densityDpi/160f); 
    return px; 
} 
+0

雅的工作先生,但按鈕的大小是非常小的,我希望它是30dp – Anuj 2015-03-02 06:46:30

+1

@anuj在這裏改變大小LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30,30);根據您的要求 – Fahim 2015-03-02 06:48:53

+1

@Auuj LayourParams構造函數是 「LinearLayout.LayoutParams(int width,int height)」。這裏寬度和高度可以是MATCH_PARENT,WRAP_CONTENT或固定大小(以像素爲單位)。設置任何你想要的。 – aberry 2015-03-02 06:54:02

1

在你的循環調用此方法爲:

for (int k = 0; k < array.length(); k++) { 
    llAddDocCircles.addView(addMoreButton("" + k)); 
} 

和你addMoreButton()方法是:

public Button addMoreButton(String text) { 

    Button button = new Button(context); 
    button.setId(buttonID); 
    LinearLayout.LayoutParams buttonLayoutParams = new LinearLayout.LayoutParams(
      LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
    button LayoutParams.setMargins(10, 10, 10, 10); //Add this if you want margin of 10dp 
    button.setLayoutParams(buttonLayoutParams); 
    buttonArrayList.add(button); 
    buttonID++; 
    return button; 
} 

而且你可以很容易地訪問這些按鈕值:

private static int buttonID = 0; 
private ArrayList<Button> buttonArrayList= new ArrayList<Button>(); 

// loop to handle each button 
for (int i = 0; i < buttonArrayList.size(); i++) { 
    Button button = buttonArrayList.get(i); 
      // do your stuff with each button 
    button.setOnClickListener(new OnClickListener() { 

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

     } 
    }); 
} 
+0

好吧然後我將如何找到哪個按鈕用戶點擊 – Anuj 2015-03-02 07:11:30

+0

檢查'for'循環上面提取'ArrayList'所有值和引用 – 2015-03-02 07:15:09

+0

謝謝先生你幫助 – Anuj 2015-03-02 07:26:18

相關問題