Я пытался немного очистить свой код. Таким образом, вместо того, чтобы иметь кучу onClicks, я реализовал View.OnClickListener в своем классе и использовал onClick (представление View) и поместил весь свой труднодоступный контент (Buttons, imageView и TextView) в качестве дел в переключателе. Все они работают за исключением одного.
У меня есть диалоговое окно, которое открывается, когда пользователи нажимают на изображение с обратной стрелкой, это прекрасно работает, когда оно помещается в отдельный onClick вне текущего onClick.
В настоящее время в случае R.id.register_first_name_and_last_name_back_arrow_iv setContentView вызывает диалоговое окно, это работает нормально, однако вложенный переключатель с делами dialog_exit_activity_dismiss_btn и dialog_exit_activity_leave_anyway_btn не работает. Это означает, что кнопки ничего не делают.
Насколько я понимаю, проблема в том, что я должен использовать:
customDialog.findViewById(R.id.dialog_exit_activity_dismiss_btn).setOnClickListener(this);
customDialog.findViewById(R.id.dialog_exit_activity_leave_anyway_btn).setOnClickListener(this);
Чтобы активировать кнопки и позволить им работать. Однако я не могу назвать их за пределами:
customDialog.setContentView(R.layout.dialog_exit_activity_warning)
И, насколько я понимаю, setOnClickListeners следует вызывать вне onClick (представление View), а не внутри как часть вложенного переключателя.
Таким образом, мой вопрос заключается в том, как заставить эти две кнопки работать в моей текущей ситуации (максимально чистым способом).
Мой код:
public class RegisterFirstNameAndLastNameActivity extends AppCompatActivity implements View.OnClickListener{
Button register_first_name_and_last_name_continue_btn, dialog_exit_activity_dismiss_btn, dialog_exit_activity_leave_anyway_btn;
register_first_name_and_last_name_continue_btn = findViewById(R.id.register_first_name_and_last_name_continue_btn);
//OnClick Initialization
findViewById(R.id.register_first_name_and_last_name_back_arrow_iv).setOnClickListener(this);
findViewById(R.id.register_first_name_and_last_name_continue_btn).setOnClickListener(this);
findViewById(R.id.register_help_tv).setOnClickListener(this);
//Custom Dialog Box Initialization
customDialog = new Dialog(this);
//OnClick Section
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.register_first_name_and_last_name_continue_btn:
//mis-clicking prevention, using threshold of 1000 ms
if (SystemClock.elapsedRealtime() - mLastClickTime < 1000){
return;
}
mLastClickTime = SystemClock.elapsedRealtime();
addFirstAndLastName();
break;
case R.id.register_first_name_and_last_name_back_arrow_iv:
customDialog.setContentView(R.layout.dialog_exit_activity_warning);
//Initialize Dialog Buttons (Must be done here)
dialog_exit_activity_dismiss_btn = customDialog.findViewById(R.id.dialog_exit_activity_dismiss_btn);
dialog_exit_activity_leave_anyway_btn = customDialog.findViewById(R.id.dialog_exit_activity_leave_anyway_btn);
switch (view.getId()){
case R.id.dialog_exit_activity_dismiss_btn:
customDialog.dismiss();
break;
case R.id.dialog_exit_activity_leave_anyway_btn:
customDialog.dismiss();
startActivity(new Intent(this, LoginRegisterOptionActivity.class));
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
break;
}
Objects.requireNonNull(customDialog.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
customDialog.show();
break;
case R.id.register_help_tv:
startActivity(new Intent(this, FeedbackAndHelpActivity.class));
break;
}
}
}