Как обрабатывать buton.onClickListeners из разных фрагментов в одном и том же упражнении? - PullRequest
0 голосов
/ 07 апреля 2020

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

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private FragmentTransaction fragmentTransaction;
    private Switch sw;
    private Button login, register;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        login = findViewById(R.id.loginButton);
        register = findViewById(R.id.registerButton);
        sw = findViewById(R.id.loginRegisterSwitch);
        sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    Log.d(TAG, "onCheckedChanged: Comes into the isChecked state");
                    fragmentTransaction = getSupportFragmentManager().beginTransaction();
                    RegisterFragment registerFragment = new RegisterFragment();
                    fragmentTransaction.replace(R.id.fragment_container,registerFragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                    fragmentTransaction.commit();
                } else {
                    Log.d(TAG, "onCheckedChanged: Come into the beginnings state");
                    fragmentTransaction = getSupportFragmentManager().beginTransaction();
                    LoginFragment loginFragment = new LoginFragment();
                    fragmentTransaction.replace(R.id.fragment_container,loginFragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                    fragmentTransaction.commit();
                }
            }
        });

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"Login Button Pressed",Toast.LENGTH_LONG).show();
            }
        });

        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"Register Button Clicked",Toast.LENGTH_LONG).show();
            }
        });

    }
}

Из-за того, что фрагмент по умолчанию в действии является логином, приложение падает на onClickListener кнопки регистрации из фрагмента регистра.

Как я могу предотвратить это? Должен ли я определять логи c (принимая данные из EditText et c) во фрагментах, а не в активности?

Извините, если это вопрос нуба.

...