skip to Main Content

I’m trying to make the progress bar interactive with the editText. When the number written in editText is greater than 10, the progress bar increases by 10%.

The code I wrote doesn’t work of course but I don’t see how to do it:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.first_gamble)

        val progressbar = findViewById<ProgressBar>(R.id.progressBar)
        val converter = findViewById<EditText>(R.id.gamblesum)
        val button = findViewById<Button>(R.id.button6)


        button.setOnClickListener() {
            if (converter > '2') {
                with(progressbar) { incrementProgressBy(10) }

            }

        }

2

Answers


  1. I went with this approach:
    In the view model create a private and public val. Public val is to be read from/ observed and private val to set the value. Public val gets its value from the private val.

    In view model

        private val _progress: MutableLiveData<Int> by lazy { MutableLiveData<Int>() }
    val progress: LiveData<Int>
        get() = _progress
    

    in the fragment / activity observe changes to progress. You can make the bar visible or not from here and set the value of the progress at the same time.

    viewModel.progress.observe(this.viewLifecycleOwner, Observer<Int> { progress ->
                var value = progress
                if (value>=1){binding.progressBar.isVisible
                    binding.progressBar.progress = value
                }else{binding.progressBar.isVisible=false}
            })
    

    Back in your view model you will need some way to reset the progress/make it invisible. For example:

      fun resetProgress() {
        _progress.value = 0
    }
    

    When you run some function or do something in the view model you can make the progress bar appear / disappear by changing the value of the private variable

    fun getCurrentUserProfileData() = viewModelScope.launch {
        _progress.value = 1
        Log.i(TAG,"user profile : ${userProfile.value}")
        _progress.value = 50
        _userList.value= FirebaseProfileService.generateUserList()
        Log.i(TAG,"user profile List : ${userList.value}")
        _progress.value = 100
        resetProgress()
    }
    
    Login or Signup to reply.
  2. if (converter.text.toString().toIntOrNull() is Int && converter.text.toString().toInt() > 10 {
        progressBar.progress = (progrrssBar.progress * 1.1).toInt()
    }
    

    You need to compare the value converted to an integer against an integer and not a string.
    You can save the first conditional if the EditText only accepts numbers, otherwise you have to validate that I entered it

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search