在我的情况下使用LayoutInflater时如何删除旧内容并显示新内容?

时间:2011-07-12 17:35:40

标签: android android-layout android-emulator android-widget android-manifest

我的 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>

通过上面显示的所有简单代码,我想实现以下功能:

main.xml

  • 按下button_one时, content_one.xml 将嵌入 main.xml content_area;

  • 按下button_two后, main.xml content_area将更新为 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 ,< strong>或当按下button_two时,content_area显示content_two.xml,它们工作正常!

但是如果先按下任一按钮,然后按另一个按钮,内容将保留在旧按钮触发的内容中。例如,首次加载应用时,如果首先按button_one,则显示 content_one.xml ,之后,如果按button_two,则内容保持< / strong>在 content_one.xml

我的问题是如何在使用 LayoutInflater 时删除旧内容并显示新内容?

2 个答案:

答案 0 :(得分:2)

问题是你在添加新视图时没有删除旧视图。在添加新视图之前粘贴这行代码:

contentArea.removeAllViews()

编辑:请注意,每次按下按钮都会使视图膨胀,以前的状态将始终丢失。如果你需要保持观点的状态,我会选择Idistic的建议。

答案 1 :(得分:2)

其他人所做的只是隐藏一个布局然后显示另一个

Stackoverlow how to change layouts dynamically

这不完全是你要问的但是完成同样的事情