我试图实现一个应用程序的“条款和条件”屏幕,当用户第一次打开应用程序时弹出。当他们接受条款和条件时,他们继续使用应用程序。如果他们拒绝,应用程序将自动关闭。我添加了一个TextView到一个ScrollView和2个按钮。当用户一路向下滚动到底部时,两个按钮被启用,他们可以选择下一步要做什么。
package com.example.termsandconditionsview
import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
import android.view.ViewTreeObserver
import android.widget.Button
import android.widget.ScrollView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity(), View.OnTouchListener, ViewTreeObserver.OnScrollChangedListener {
private var svMain: ScrollView? = null
private lateinit var buttonAccept: Button
private lateinit var buttonDecline: Button
private lateinit var sharedPref: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.terms_and_conditions_view)
svMain = findViewById(R.id.scrollView2)
svMain?.viewTreeObserver?.addOnScrollChangedListener(this)
buttonAccept = findViewById(R.id.button_accept)
buttonDecline = findViewById(R.id.button_decline)
sharedPref = getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE)
val termsAccepted = sharedPref.getBoolean("terms_accepted", false)
if (termsAccepted) {
setContentView(R.layout.activity_main)
} else {
setContentView(R.layout.terms_and_conditions_view)
}
}
override fun onScrollChanged() {
svMain?.let { scrollView ->
val view = scrollView.getChildAt(scrollView.childCount - 1) as View
val bottomDetector = view.bottom - (scrollView.height + scrollView.scrollY)
if (bottomDetector <= 0) {
buttonAccept.isEnabled = true
buttonDecline.isEnabled = true
} else {
buttonAccept.isEnabled = false
buttonDecline.isEnabled = false
}
buttonAccept.setOnClickListener {
// Update the termsAccepted value to true in SharedPreferences
val editor = sharedPref.edit()
editor.putBoolean("terms_accepted", true)
editor.apply()
val textAcceptTac = getString(R.string.txt_accept_tac)
val duration = Toast.LENGTH_LONG
val toastAccept = Toast.makeText(this, textAcceptTac, duration)
toastAccept.show()
setContentView(R.layout.activity_main)
// Proceed with the app as the user has accepted the terms&conditions
}
buttonDecline.setOnClickListener{
val textDeclineTac = getString(R.string.txt_decline_tac)
val duration = Toast.LENGTH_LONG
val toastDecline = Toast.makeText(this, textDeclineTac, duration)
toastDecline.show()
// Close app when user clicks the "Decline" button.
finish()
}
}
}
override fun onTouch(p0: View?, p1: MotionEvent?): Boolean {
TODO("Not yet implemented")
}
}
现在的问题是我的偏好部分有问题。在我添加之前,按钮禁用/启用工作,以及On.Click事件侦听器。在添加了首选项的代码之后,什么都不起作用了。
我不知道有什么问题。有人能帮帮我吗?Thanks!:)
2条答案
按热度按时间nnt7mjpx1#
你设置了两次setContentView()。这意味着在该行之前初始化的所有视图都将为空。
ecr0jaav2#
正如Hezy Ziv所说,我设置了两次内容视图,这毫无意义。
下面是我提出的解决方案,它现在以我希望的方式工作: