Как чередовать 2 макета в одном упражнении? - PullRequest
0 голосов
/ 22 января 2019

Я хочу знать, как выполнить одно и то же действие, чтобы показать 2 макета. Я объясняю, у меня есть действие с логином, и внутри этой же кнопки есть две кнопки (одна называется «логин», а другая «SingUp»). Идея состоит в том, что при нажатии на одну из этих 2 отображается разная раскладка для каждой кнопки, но без необходимости менять всю деятельность в одном. Я достиг этого частично, добавив 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 голосов
/ 22 января 2019

Вариант 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

Использовать VISIBLE / GONE с предопределенными макетами внутри Activity_main

0 голосов
/ 22 января 2019

Создайте один макет с двумя отдельными видами, которые имеют высоту и ширину 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);
    }
});

Вы можете подходить к нему другими способами, используя фрагменты, которые можноутверждать, что это более подходящий способ. Переключение между двумя фрагментами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...