我想知道如何获得相同的活动以显示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个布局之间切换,但是如果仅当我尝试通过第二次按按钮进入某个布局时,按钮才第一次起作用,直到重新启动该按钮后,该按钮才起作用应用程序。
答案 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