Я видел много подобных проблем, но я хотел указать на мою, потому что я пробовал несколько подходов без какого-либо эффекта. У меня есть активность, и внутри нее у меня есть кнопка переключения, которая переключается между двумя фрагментами - 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) во фрагментах, а не в активности?
Извините, если это вопрос нуба.