如何在同一活动中的2种布局之间交替?

时间:2019-01-22 17:00:30

标签: android layout

我想知道如何获得相同的活动以显示2种布局。我解释一下,我有一个带有登录名的活动,并且在其中有两个按钮(一个叫做“登录”,另一个叫做“ SingUp”),其想法是,当您单击这两个按钮之一时,每个按钮的布局都会不同,但不必一次更改所有活动。我通过将SetContentView添加到每个按钮的Onclic来部分实现它,并且它只能在第一次使用,没有活动,它以登录布局开始,然后单击singUp按钮,如果它更改了布局,但是稍后要返回登录布局,我不再需要重新启动应用程序。我想要实现的是使用按钮更改同一个活动中的布局,无论它们提到什么方法,或者它们可以帮助我知道代码的哪一部分错误:(谢谢。

公共类MainActivity扩展了AppCompatActivity {

private Button btnLogin,btnSignup;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btnLogin=(Button)findViewById(R.id.btnLogin);
    btnSignup=(Button)findViewById(R.id.btnSignup);

    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setContentView(R.layout.activity_main);
        }
    });

    btnSignup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setContentView(R.layout.activity_sign_up);
        }
    });




}

} 与先前的代码并设法在同一活动中在2个布局之间切换,但是如果仅当我尝试通过第二次按按钮进入某个布局时,按钮才第一次起作用,直到重新启动该按钮后,该按钮才起作用应用程序。

2 个答案:

答案 0 :(得分:1)

选项1 尝试重新创建活动。保存要加载的视图,然后重新创建。

private Button btnLogin,btnSignup;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(preference.getInt(ACTIVITY)==1)
     setContentView(R.layout.activity_main);
    else 
     setContentView(R.layout.activity_sign_up);

    btnLogin=(Button)findViewById(R.id.btnLogin);
    btnSignup=(Button)findViewById(R.id.btnSignup);

    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            preference.setInt(ACTIVITY, 1);
            recreate();
        }
    });

    btnSignup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            preference.setInt(ACTIVITY, 2);
            recreate();
        }
    });

}

选项2

使用片段。创建2个片段,并在单击按钮时将它们充气到活动中

选项3

在activity_main内以预定义的布局使用VISIBLE / GONE

答案 1 :(得分:0)

使用两个match_parent高度和宽度的单独视图创建一个布局。

切换视图时隐藏/显示每一个

<LinearLayout 
  android:id="@+id/parent"
  android:width="match_parent"
  android:height="match_parent"
  android:orientation="vertical">

  <LinearLayout 
    android:id="@+id/main"
    android:width="match_parent"
    android:height="match_parent"
    android:orientation="vertical"
    android:visibility="visibile">
    <!-- Add child views here -->
  </LinearLayout>
  <LinearLayout 
    android:id="@+id/sign_up"
    android:width="match_parent"
    android:height="match_parent"
    android:orientation="vertical"
    android:visibility="gone">
    <!-- Add child views here -->
  </LinearLayout>
</LinearLayout>

然后以编程方式...

btnLogin.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mainView.setVisibility(View.VISIBLE);
        loginView.setVisibility(View.GONE);
    }
});

btnSignup.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mainView.setVisibility(View.GONE);
        loginView.setVisibility(View.VISIBLE);
    }
});

您可以使用“片段”以其他方式来处理它,有人可能会认为这是更合适的方式。 Switch between two fragments