How to increment ++ from an existing value

107 Views Asked by At

I am working on an app to track winter bird feeder counts. I am using ++ to increment and -- to decrement.

When I try to increment an existing value, the increment re-starts at zero. For instance, if I have an existing value of 4, and I want to add 2, I should be able to click the increment TextView two times to get a value of 6. Instead, I have to click six times.

How do I fix this?

Here's my code.

UpdateActivity

...

class  UpdateBirdActivity : AppCompatActivity() {

    //this right here is probably the problem   
    var totalcount : Int = 0
    var count : Int = 0
    var femalecount : Int = 0
    var malecount : Int = 0

    private var activityUpdateBirdBinding: ActivityUpdateBirdBinding? = null
    lateinit var viewModel: ViewModel
    var birdID = -1

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        activityUpdateBirdBinding = DataBindingUtil.setContentView(
            this, R.layout.activity_update_bird)

        val database by lazy { KalamazooDatabase.getDatabase(application) }
        val kalamazooRepository by lazy { KalamazooRepository(database.getKalamazooDao()) }
        val viewModelFactory = ViewModelFactory(kalamazooRepository)
        viewModel = ViewModelProvider(this, viewModelFactory).get(ViewModel::class.java)

        val bird = intent.getStringExtra(AppConstants.BIRD_NAME)
        activityUpdateBirdBinding!!.tvBird.setText(bird)

        val totalcount = intent.getStringExtra(BIRD_TOTALCOUNT)
        activityUpdateBirdBinding!!.etTotalcount.setText(totalcount)

        val cnt  = intent.getStringExtra(BIRD_COUNT)
        activityUpdateBirdBinding!!.countText.setText(cnt)

        val femalecnt  = intent.getStringExtra(BIRD_FEMALECOUNT)
        activityUpdateBirdBinding!!.femalecountText.setText(femalecnt)

        val malecnt  = intent.getStringExtra(BIRD_MALECOUNT)
        activityUpdateBirdBinding!!.malecountText.setText(malecnt)

        birdID = intent.getIntExtra(AppConstants.BIRD_ID, -1)

        activityUpdateBirdBinding!!.btnAdd.setOnClickListener {
            val bird = activityUpdateBirdBinding!!.tvBird.text.toString()
            val totalcount = activityUpdateBirdBinding!!.etTotalcount.text.toString()
            val cnt = activityUpdateBirdBinding!!.countText.text.toString()
            val femalecnt = activityUpdateBirdBinding!!.femalecountText.text.toString()
            val malecnt = activityUpdateBirdBinding!!.malecountText.text.toString()
            val sdf = SimpleDateFormat("dd")
            val currentDateAndTime: String = sdf.format(Date())
            var updatedKalamazoo = Kalamazoo(bird, totalcount, cnt, femalecnt, malecnt, currentDateAndTime)
            updatedKalamazoo.id = birdID
            viewModel.updateBird(updatedKalamazoo)
            startActivity(Intent(applicationContext, MainActivity::class.java))
            this.finish()
        }
    }

    fun totalcountPlus(){
        totalcount ++
        val message = activityUpdateBirdBinding!!.etTotalcount
        message.text = "$totalcount"  }

    fun totalcountMinus(){
        totalcount --
        val message = activityUpdateBirdBinding!!.etTotalcount
        message.text = "$totalcount"  }

    fun count_onClickIncrement(view: View){//removing the view:View parameter breaks the app
        totalcountPlus()
        count ++
        val countmessage =activityUpdateBirdBinding!!.countText
        countmessage.text = "$count"    }

    fun count_onClickDecrement(view: View) {
        totalcountMinus()
        count --
        val countmessage =activityUpdateBirdBinding!!.countText
        countmessage.text = "$count"    }

    fun female_onClickIncrement(view: View) {
        totalcountPlus()
        femalecount ++
        val femalecountmessage =activityUpdateBirdBinding!!.femalecountText
        femalecountmessage.text = "$femalecount"    }

    fun female_onClickDecrement(view: View) {
        totalcountMinus()
        femalecount --
        val femalecountmessage =activityUpdateBirdBinding!!.femalecountText
        femalecountmessage.text = "$femalecount"    }

    fun male_onClickIncrement(view: View) {
        totalcountPlus()
        malecount ++
        val malecountmessage =activityUpdateBirdBinding!!.malecountText
        malecountmessage.text = "$malecount"    }

    fun male_onClickDecrement(view: View) {
        totalcountMinus()
        malecount --
        val malecountmessage =activityUpdateBirdBinding!!.malecountText
        malecountmessage.text = "$malecount"    }
}

...

Update xml

...

 <?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:tools="http://schemas.android.com/tools"
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical"
         android:gravity="center_horizontal"
         android:background="@color/white"
         tools:context=".ui.activity.UpdateBirdActivity">
 
         <androidx.appcompat.widget.Toolbar
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
             android:background="@color/color_ash"
             android:elevation="4dp"
             android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
             app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
 
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
                 android:textSize="@dimen/sp_18"
                 android:textColor="@color/white"
                 android:text="Bird"/>
         </androidx.appcompat.widget.Toolbar>
 
         <TextView
             android:id="@+id/tv_bird"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:hint="Bird Name"
             android:layout_gravity="start"
             android:layout_marginBottom="10dp"
             android:layout_marginStart="20dp"
             android:textColor="#5C615D"
             android:textStyle="bold"
             android:textSize="24sp"/>
 
         <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="vertical">
 
     <!--    //totalcount-->
             <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:layout_marginStart="20dp"
             android:layout_gravity="center_vertical">
 
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:textColor="@color/black"
                     android:text="Total Count: " />
 
                 <TextView
                     android:id="@+id/et_totalcount"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:textColor="@color/black"
                     android:hint="0" />
 
         </LinearLayout>
 
     <!--    //count-->
             <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:layout_marginStart="20dp"
             android:layout_gravity="center_vertical">
 
                 <TextView
                     android:layout_width="120dp"
                     android:layout_height="wrap_content"
                     android:layout_marginBottom="10dp"
                     android:gravity="end"
                     android:textColor="@color/black"
                     android:text="Count: " />
 
                 <TextView
                     android:id="@+id/countText"
                     android:layout_width="20dp"
                     android:layout_height="wrap_content"
                     android:layout_marginBottom="10dp"
                     android:gravity="end"
                     android:textColor="@color/black"
                     android:hint="0" />
 
                  <TextView
                      android:id="@+id/tv_countViewIncrement"
                      android:layout_width="10dp"
                      android:layout_height="wrap_content"
                      android:layout_marginStart="10dp"
                      android:layout_marginEnd="10dp"
                      android:foreground="@drawable/baseline_arrow_upward_24"
                      android:onClick="count_onClickIncrement" />
 
                  <TextView
                      android:id="@+id/tv_counttextViewDecremen1"
                      android:layout_width="10dp"
                      android:layout_marginStart="10dp"
                      android:layout_marginEnd="10dp"
                      android:layout_height="wrap_content"
                      android:foreground="@drawable/baseline_arrow_downward_24"
                      android:onClick="count_onClickdecrement" />
 
              </LinearLayout>
 
      <!--    //female count-->
             <LinearLayout
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:orientation="horizontal"
                  android:layout_marginStart="20dp"
                  android:layout_gravity="center_vertical">
 
                 <TextView
                     android:layout_width="120dp"
                     android:layout_height="wrap_content"
                     android:gravity="end"
                     android:layout_marginBottom="10dp"
                     android:textColor="@color/black"
                     android:text="Female Count: " />
 
                 <TextView
                     android:id="@+id/femalecountText"
                     android:layout_width="20dp"
                     android:layout_height="wrap_content"
                     android:gravity="end"
                     android:layout_marginBottom="10dp"
                     android:textColor="@color/black"
                     android:hint="0" />
 
                  <TextView
                      android:id="@+id/tv_femaleViewIncrement"
                      android:layout_width="10dp"
                      android:layout_height="wrap_content"
                      android:layout_marginStart="10dp"
                      android:layout_marginEnd="10dp"
                      android:foreground="@drawable/baseline_arrow_upward_24"
                      android:onClick="female_onClickIncrement"/>
      
                  <TextView
                      android:id="@+id/tv_femaleViewDecrement"
                      android:layout_width="10dp"
                      android:layout_marginStart="10dp"
                      android:layout_marginEnd="10dp"
                      android:layout_height="wrap_content"
                      android:foreground="@drawable/baseline_arrow_downward_24"
                      android:onClick="female_onClickdecrement" />
 
              </LinearLayout>
 
     <!--    //male count-->
             <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:layout_marginStart="20dp"
             android:layout_gravity="center_vertical">
 
                 <TextView
                     android:layout_width="120dp"
                     android:layout_height="wrap_content"
                     android:gravity="end"
                     android:layout_marginBottom="10dp"
                     android:textColor="@color/black"
                     android:text="Male Count: " />
 
                 <TextView
                     android:id="@+id/malecountText"
                     android:layout_width="20dp"
                     android:layout_height="wrap_content"
                     android:gravity="end"
                     android:layout_marginBottom="10dp"
                     android:textColor="@color/black"
                     android:hint="0" />
 
                  <TextView
                      android:id="@+id/tv_maleViewIncrement"
                      android:layout_width="10dp"
                      android:layout_height="wrap_content"
                      android:layout_marginStart="10dp"
                      android:layout_marginEnd="10dp"
                      android:foreground="@drawable/baseline_arrow_upward_24"
                      android:onClick="male_onClickIncrement"/>
 
                  <TextView
                      android:id="@+id/tv_maleViewDecrement"
                      android:layout_width="10dp"
                      android:layout_marginStart="10dp"
                      android:layout_marginEnd="10dp"
                      android:layout_height="wrap_content"
                      android:foreground="@drawable/baseline_arrow_downward_24"
                      android:onClick="male_onClickdecrement" />
 
              </LinearLayout>
         </LinearLayout>
 
         <Button
             android:id="@+id/btn_add"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:backgroundTint="@color/color_ash"
             android:text="Update"
             android:textSize="24sp"/>
 
     </LinearLayout>
 
 </layout>

...

1

There are 1 best solutions below

0
littleoldlady On

This problem is solved. I abandoned all attempts to figure out why my code wasn't working and found a library at github.com/kojofosu/Quantitizer that does exactly what I needed. Thank you Kojo Fosu Bempa Edue.

fyi

xml

        <com.mcdev.quantitizerlibrary.NoValueQuantitizer
            android:id="@+id/np_Count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="20dp" />s

activity

nvq_cnt.apply {
.
.//code removed for clarity, and because somebody 
.//out there thinks I post too much code
.
    setQuantitizerListener(object : QuantitizerListener {
        override fun onDecrease() {
            val cnt = activityUpdateBirdBinding!!.tvCount
            val a = cnt.text.toString().toInt()
            val b = 1
            cnt.text = (a - b).toString()
            totalCount() }
        override fun onIncrease() {
            val cnt = activityUpdateBirdBinding!!.tvCount
            val a = cnt.text.toString().toInt()
            val b = 1
            cnt.text = (a + b).toString()
            totalCount() }
        override fun onValueChanged(value: Int) { }
    })
}

dependency

implementation ("com.github.kojofosu:Quantitizer:1.6.8")

Since I'm working with Hedgehog version of AS, needed to add maven(url = "https://jitpack.io") to dependencyResolutionManagement in settings.gradle.kts

settings.gradle.kt

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven(url = "https://jitpack.io")    <-this here
    }
}