Вложенный переключатель в onClick с setContentView между - PullRequest
0 голосов
/ 01 мая 2020

Я пытался немного очистить свой код. Таким образом, вместо того, чтобы иметь кучу 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;
        }
    }
}
...