2013-02-10 2 views
0

Я новичок в разработке Android.Inflating 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); 
} 

Первый звонок для раздуванияNewRow добавляет строку, отлично. Второй звонок, кажется, ничего не делает! Никакого исключения, ни одна строка не добавляется.

Я добавил звонок setVisibility, чтобы убедиться. Это не имеет значения.

Может показаться странным назвать inflateNewRow дважды, но это на самом деле только для этого примера. Он должен быть вызван один раз в onCreate, затем из меню click-event. Однако этот простой пример воссоздает проблему.

Это маленькая точка зрения, что это должен быть добавлен:

<?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

+0

@kaze Позвольте мне проверить код один раз –

+0

@kaze Я неправильно понял ваше требование alonf wd изменения, которые вам также необходимо добавить в группу просмотра, вот пример http://stackoverflow.com/questions/6661745/dynamically-adding- a-child-to-linearlayout-with-getting-every-childs-position –

Смежные вопросы