2013-02-10 37 views
0

我是Android開發新手。充氣GUI只能使用一次,怎麼樣?

我有活動,我希望添加一些GUI元素。

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dial_details); 
    if (android.os.Build.VERSION.SDK_INT >= 11) 
     // Show the Up button in the action bar. 
     getActionBar().setDisplayHomeAsUpEnabled(true); 

    inflateNewRow(); 
    inflateNewRow(); 
} 

private void inflateNewRow() 
{ 
    LinearLayout thisLayout = (LinearLayout) findViewById(R.id.dial_details_layout); 
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      // Before edit! 
    //inflater.inflate(R.layout.dialitem_details, thisLayout); 
      // After edit, which works! 
      inflater.inflate(R.layout.dialitem_details, null); 
      thisLayout.addView(ll); 
} 

第一次調用inflateNewRow添加行,罰款。第二個電話,似乎什麼都不做!沒有例外,沒有行被添加。

我添加了setVisibility調用,只是爲了確保。沒什麼區別。

將inflateNewRow調用兩次可能看起來很奇怪,但實際上只是爲了這個例子。它將在onCreate中被調用一次,然後從菜單單擊事件中被調用。這個簡單的例子雖然重現了這個問題。

這是要添加這就是小圖:

<?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="horizontal" > 

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="2" 
    android:ems="10" 
    android:inputType="number" > 

    <requestFocus /> 
</EditText> 

<CheckBox 
    android:id="@+id/checkBox1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</LinearLayout> 

到這一點:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/dial_details_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".DialDetailsActivity" > 

<CheckBox 
    android:id="@+id/checkBox1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="CheckBox" /> 

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:inputType="number" > 

    <requestFocus /> 
</EditText> 

</LinearLayout> 

爲什麼只有第一行出現任何想法添加/?

回答

0

當你調用這個函數一次LinearLayout ll被創建一次,但是當你再次調用它已經存在的不是它嗎? 所以如果你沒有創建LL和只寫

inflater.inflate(R.layout.dialitem_details, thisLayout); 

,而不是

LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.dialitem_details, thisLayout); 

你應該得到期望的結果

,也沒有必要設置可見真正爲每個項目

+0

感謝您的回答。我嘗試了你的建議。不幸的是它沒有任何區別。我已經將問題中的代碼更新爲您的建議。 – kaze 2013-02-10 17:32:23

+0

@kaze讓我檢查一次代碼 – 2013-02-10 17:33:58

+0

@kaze我誤解了你的需求alonf wd你還需要添加孩子到你的視圖組中的變化這裏是一個示例http://stackoverflow.com/questions/6661745/dynamically-adding-一個孩子到linearlayout與越來越每個孩子的位置 – 2013-02-10 17:41:51