我正在开发一个应用程序来跟踪冬季喂鸟器的数量。我使用 ++ 来递增并使用 -- 来递减。
当我尝试增加现有值时,增量会从零重新开始。例如,如果我的现有值为 4,并且我想添加 2,我应该能够单击增量 TextView 两次以获得值 6。相反,我必须单击六次。
我该如何解决这个问题?
这是我的代码。
更新活动
...
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" }
}
...
更新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>
...
这个问题就解决了。我放弃了所有试图弄清楚为什么我的代码无法工作的尝试,并在 github.com/kojofosu/Quantitizer 上找到了一个库,它完全可以满足我的需要。谢谢 Kojo Fosu Bempa Edue。
仅供参考
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
活动
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) { }
})
}
依赖性
implementation ("com.github.kojofosu:Quantitizer:1.6.8")
由于我正在使用 AS 的 Hedgehog 版本,因此需要添加 maven(url = "https://jitpack.io") 到 settings.gradle.kts 中的 dependencyResolutionManagement
设置.gradle.kt
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven(url = "https://jitpack.io") <-this here
}
}