我的 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 时删除旧内容并显示新内容?
答案 0 :(得分:2)
问题是你在添加新视图时没有删除旧视图。在添加新视图之前粘贴这行代码:
contentArea.removeAllViews()
编辑:请注意,每次按下按钮都会使视图膨胀,以前的状态将始终丢失。如果你需要保持观点的状态,我会选择Idistic的建议。
答案 1 :(得分:2)