Как удалить старый контент и показать новый контент при использовании LayoutInflater в моем случае? - PullRequest
2 голосов
/ 12 июля 2011

Мой main.xml макет просто содержит две кнопки и область содержимого , которая показана ниже:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">


    <LinearLayout 
        android:id="@+id/myBtns"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
    >
        <Button
            android:id="@+id/btn_one"
            android:layout_width="100dip"
            android:layout_height="30dip"
                android:text="button one"
         />
         <Button
            android:id="@+id/btn_two"
            android:layout_width="100dip"
            android:layout_height="30dip"
                android:text="button two"
         />
    </LinearLayout>

    <LinearLayout 
        android:id="@+id/content_area"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    >
         <!--different button press will embed different content here-->

    </LinearLayout>


   </LinearLayout>

Я хотел бы создать свою собственную вкладку , чтобы каждое нажатие кнопки обновляло содержимое (content_area) под кнопками. Поэтому я подготовил два других макета контента:

content_one.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <TextView.../>
    <Button .../>

</LinearLayout>

content_two.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <Gallery.../>
    <Button .../>

</LinearLayout>

Со всеми моими простыми кодами, показанными выше, я хотел бы реализовать функцию, которая:

in main.xml :

  • при нажатии button_one, content_one.xml будет добавлено в content_area из main.xml ;

  • при нажатии button_two значение content_area из main.xml будет обновлено до content_two.xml

Что означает использование кнопки для создания функции, подобной табуляции .

Я пытался:

button_one.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v){
            LayoutInflater inflater = (LayoutInflater)MyActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View inflatedView = inflater.inflate(R.layout.content_one, null);

            LinearLayout contentArea= (LinearLayout) findViewById(R.id.content_area);
            contentArea.addView(inflatedView);
        }
    });

button_two.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v){
                LayoutInflater inflater = (LayoutInflater)MyActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View inflatedView = inflater.inflate(R.layout.content_two, null);

                LinearLayout contentArea= (LinearLayout) findViewById(R.id.content_area);
                contentArea.addView(inflatedView);
            }
        });

Код выше частично работает , я имею в виду, что при нажатии button_one, content_area показывает content_one.xml , или при нажатии button_two, content_area показывает content_two.xml, они работают нормально!

Но если сначала нажать одну из кнопок, а затем нажать другую, содержимое останется в содержимом, вызванном старыми кнопками. Например, при первой загрузке приложения, если сначала нажать button_one, отображается content_one.xml , после этого, если я нажму button_two, содержимое будет оставаться в content_one.xml .

Мой вопрос: как удалить старый контент и показать новый контент при использовании LayoutInflater ?

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

То, что сделали другие, это просто спрятали один макет, а затем показали другой

Stackoverlow, как динамически изменять макеты

Это не совсем то, что вы спрашиваете, но выполняет то же самое

2 голосов
/ 12 июля 2011

Проблема в том, что вы не удаляете старый вид при добавлении нового.Вставьте эту строку кода, прежде чем добавлять новый вид:

contentArea.removeAllViews()

Редактировать: Обратите внимание, что при каждом нажатии кнопки надувается вид, ваше предыдущее состояниевсегда будет потеряноЕсли вам нужно сохранить состояние зрения, я бы согласился с предложением Идистика.

...