多次调用setContentView()

时间:2010-10-25 20:53:54

标签: android

有一种方法可以在一个活动期间使用不同的setContentView(id)多次调用id来呈现不同的视图,或者我是否必须开始新的活动?

3 个答案:

答案 0 :(得分:10)

根据Austyn的评论,我确实设法找到了一些关于如何使用ViewFlipper在另一篇文章中完成此操作的指导(请参阅勾选的顶部答案here。)

如果您不想使用ViewFlipper,我找到了一个很好的示例,说明如何在同一视图中切换布局here

XML:

<FrameLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView 
        android:src="@drawable/icon"
        android:scaleType="fitCenter"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"/>
    <TextView
        android:text="Learn-Android.com"
        android:textSize="24sp"
        android:textColor="#000000"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:gravity="center"/>
</FrameLayout>

代码:

private void SwitchLayout2() {
RelativeLayout Layout1 = (RelativeLayout)findViewById(R.id.layout1);
RelativeLayout Layout2 = (RelativeLayout)findViewById(R.id.layout2);

// Enable Layout 2 and Disable Layout 1
Layout1 .setVisibility(View.GONE);
Layout2.setVisibility(View.VISIBLE);
}

private void SwitchLayout1() {
RelativeLayout Layout1 = (RelativeLayout)findViewById(R.id.layout1);
RelativeLayout Layout2 = (RelativeLayout)findViewById(R.id.layout2);

// Enable Layout 1 & Disable Layout2
Layout1.setVisibility(View.VISIBLE);
Layout2.setVisibility(View.GONE);
}

答案 1 :(得分:3)

不,你不能轻易多次调用它。您需要完全删除所有视图,然后对新布局进行充气,或使用ViewFlipper(或FrameLayout)在不同视图之间切换。

另一方面,这个问题之前已被问过,虽然我无法立即找到它。

答案 2 :(得分:0)

您可以在活动中尝试此操作:

getWindow().addContentView(View, ViewGroup.LayoutParams);

两个内容视图将是一个在另一个之上。但是,没有直接的方法来删除以这种方式添加的某个视图。

另请注意,在上次通话后拨打setContentView,将删除所有以前添加的内容视图。