从一个布局视图切换到另一个布局视图并返回?

时间:2011-09-19 22:20:47

标签: android android-layout android-button

想制作一个以布局开头的Android应用,当您按下此布局中的按钮(称为 stateButton )时,布局会变为< em> main2 布局包含另一个按钮(名为 boton2 ),当你按下这个按钮时,你会回到第一个主要按钮。

我想在同一个活动中执行此操作而不创建或启动另一个活动。

在这里,我向您展示部分代码:

public class NuevoshActivity extends Activity
implements SensorEventListener, OnClickListener {
    private Button stateButton;
    private Button boton2;

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);       
        setContentView(R.layout.main); 
        this.stateButton = (Button) this.findViewById(R.id.boton);
        this.boton2 = (Button) this.findViewById(R.id.boton2);      
        stateButton.setOnClickListener(this);
        boton2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if(v==stateButton) {
            setContentView(R.layout.main2);             
        }
        else if(v==boton2) {
            setContentView(R.layout.main);
        }
    }
}

电源只有一些图像,文本视图和按钮。

但我有些麻烦。不能只是那么简单,或者我错过了什么或者出了什么问题?

4 个答案:

答案 0 :(得分:3)

当您使用findViewById时,您实际上是在尝试在setContentView指定的布局中查找视图。因此,当您尝试检查按钮时,一次又一次地使用setContentView可能会带来问题。

我不会使用setContentView,而是将屏幕的2个布局添加为视图翻转器的子项,一次只显示一个子项。您可以指定要显示的子项的索引。使用视图翻转器的好处是,如果在视图之间切换时需要动画,则可以轻松为视图指定“输入”和“输出”动画。这是一个更清洁的方法,然后一次又一次地调用setContentView。

答案 1 :(得分:2)

FrameLayout可以很好地处理这个...使用<include... contstruct加载多个其他布局,然后您可以使用setvisibility(View.VISIBLE);和{{来切换它们之间来回切换1}}在各个布局上。

例如:

主XML包括另外两种布局:

setVisibility(View.INVISIBLE);

在布局之间切换的代码:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/frameLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
    <include android:id="@+id/buildinvoice_step1_layout" layout="@layout/buildinvoice_step1" android:layout_width="fill_parent" android:layout_height="fill_parent"></include>
    <include android:id="@+id/buildinvoice_step2_layout" android:layout_width="fill_parent" layout="@layout/buildinvoice_step2" android:layout_height="fill_parent"></include>
</FrameLayout>

您还需要在活动开始时(或以XML格式)设置各个布局的可见性,否则您将看到它们 - 一个在另一个之上。

答案 2 :(得分:0)

您的boton2按钮将为NULL,因为该按钮的定义位于main2.xml。 您将能够找到的唯一视图是main.xml中定义的视图。

答案 3 :(得分:0)

谢谢!所有的信息都很有用,可以理解很多东西,正如C0deAttack评论的那样,我在main2上的按钮上遇到了麻烦。我所做的是将View.VISIBLE和View.GONE设置为每个布局中我想要的TextViews和Buttons。非常感谢你。