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>
...
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
activity
dependency
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