Android Фрагмент MVVM Нажатие кнопки не работает после просмотра перелистывания - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть действие с тремя фрагментами, которые перемещаются с помощью ViewPager. Начальный фрагмент имеет кнопку с событием щелчка. При первом появлении фрагмента кнопка работает, но когда я проводю до последнего фрагмента и возвращаюсь к основному фрагменту, кнопка не работает. Он делает это только с помощью кнопки, больше ничего ... Я знаю, что это, вероятно, что-то довольно очевидное, будьте добрыми людьми, смеются!

расположение кнопок

        <Button
            android:id="@+id/login_button"
            android:layout_width="match_parent"
            android:textSize="@dimen/body_text_size"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/layout_margin"
            android:layout_marginEnd="@dimen/layout_margin"
            android:layout_marginBottom="@dimen/layout_margin"
            android:focusable="false"
            android:background="@drawable/button_pressed_state"
            android:text="@string/login"
            android:textColor="@color/white"
            android:textStyle="bold" />

Код фрагмента, на котором это происходит. *

        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            binding = DataBindingUtil.inflate(inflater, R.layout.login_fragment, container, false)
            viewModel = ViewModelProvider(this).get(LoginViewModel::class.java)
            loginView = binding.root
            initClickableLinks()
            launch {
                initButtonClick()
            }
            return loginView
        }


        private suspend fun initButtonClick(): String? {
            val edittextSize = binding.emailAddressEditText.textSize
            val textviewSize = binding.forgetPassTextview.textSize
            var message: String? = ""
            binding.loginButton.setOnClickListener {
                fun onClick(view: View?) {
                    try {
                        viewModel.setEmailAddress(binding.emailAddressEditText.text.toString())
                        viewModel.setPassword(binding.passwordEditText.text.toString())
                        //if nothing is entered this will do nothing but update text
                        val invalidString = requireActivity().getString(R.string.invalid_combo)
                        binding.authTextView.text = ""
                        if (binding.emailAddressEditText.text.toString()
                                .isBlank() || binding.passwordEditText.text.toString().isBlank()
                        ) {
                            binding.authTextView.text = invalidString
                            //exits listener because authentication failed
    //                        return@setOnClickListener
                        }
                        binding.progressBar.visibility = View.VISIBLE
                        //background thread for IO
                        GlobalScope.launch(Dispatchers.IO) {
                            //call api

                            //UI Thread
                            withContext(Dispatchers.Main) {
                                val mess = viewModel.getMessage()
                                if (mess.equals("Successful")) {
                                    val intent = Intent(activity, MemberActivity::class.java)
                                    val loginfo = viewModel.getLoginResult().toString()
                                    intent.putExtra("loginIno", loginfo)
                                    activity?.startActivity(intent)
                                } else {
                                    binding.authTextView.text = mess
                                    Toast.makeText(activity!!.applicationContext, mess, Toast.LENGTH_LONG).show()
                                }
                                binding.progressBar.visibility = View.GONE
                            }
                        }
                    } catch (ex: Exception) {
                        println(ex)
                    }
                }
            }
            return message
        }

Это происходит только с кнопкой

1 Ответ

0 голосов
/ 08 апреля 2020

Частично я обнаружил, что следующее вызывается только один раз:

            initButtonClick()

Удаление запуска и изменение функции Private suspend на частную функцию, которая все еще асинхронно вызывает службу входа, устранила проблему и теперь получает вызывается несколько раз.

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