大佬教程收集整理的这篇文章主要介绍了步进传感器不计入文本视图(在片段中),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在使用片段在 androID studio(使用 kotlin)上做一个项目。我打算在另一个片段中实现一个步进传感器,但它没有用,也没有错误。我不知道错误在哪里。传感器看起来不错,但在文本视图中没有计算步数。我将传感器的代码放在片段类中。任何人都可以帮助我吗?应用程序没有崩溃,也没有告诉错误在哪里,只是没有计算步数
这是Fragment Class的代码
package com.androIDdevs.runningappyt.ui.fragments
import androID.content.Context.SENSOR_serviCE
import androID.harDWare.Sensor
import androID.harDWare.SensorEvent
import androID.harDWare.SensorEventListener
import androID.harDWare.SensoRMANager
import androID.os.bundle
import androID.util.Log
import androID.vIEw.VIEw
import androID.Widget.Toast
import androID.vIEw.LayoutInflater
import androID.vIEw.VIEwGroup
import androIDx.fragment.app.Fragment
import com.androIDdevs.runningappyt.R
import com.androIDdevs.runningappyt.ui.viewmodels.Mainviewmodel
import com.androIDdevs.runningappyt.ui.viewmodels.AppUtils
import dagger.hilt.androID.AndroIDEntryPoint
import kotlinx.androID.synthetic.main.fragment_steps.*
import java.util.*
import com.androIDdevs.runningappyt.core.SharedPreferencesmanager
@AndroIDEntryPoint
class StepsFragment : Fragment(R.layout.fragment_steps),SensorEventListener
{
private var isstarted = false
private var sensoRMANager: SensoRMANager? = null
private var stepCounter = 0
private var counterSteps = 0
private var stepDetector = 0
private var startDate: Date? = null
private var endDate: Date? = null
companion object{
fun newInstance() = StepsFragment()
const val TAG = "StepsFragment"}
private lateinit var viewmodel: Mainviewmodel
overrIDe fun onCreateVIEw(
inflater: LayoutInflater,container: VIEwGroup?,savedInstanceState: Bundle?
): VIEw {
return inflater.inflate(R.layout.fragment_steps,stepsContainer,falsE)
}
overrIDe fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceStatE)l
sensoRMANager = context?.getSystemservice(SENSOR_serviCE) as SensoRMANager
// load prevIoUs status if any
SharedPreferencesmanager.instance.loadStartDate(startDatE)
SharedPreferencesmanager.instance.loadInitialStepCount(counterSteps)
Log.d(tag,"startDate = $startDate")
Log.d(tag,"counterSteps = $counterSteps")
if (startDate != null) {
isstarted = true
}
initUI()
bindUI()
}
overrIDe fun onResume() {
super.onResume()
if (this.isstarted) {
startservice()
}
}
overrIDe fun onPause() {
super.onPause()
stopservice()
}
overrIDe fun onAccuracyChanged(sensor: Sensor?,accuracy: int) {
Log.d(tag,"accuracy = $accuracy")
}
overrIDe fun onSensorChanged(event: SensorEvent) {
when (event.sensor.typE) {
Sensor.TYPE_STEP_DETECTOR -> {
stepDetector++
}
Sensor.TYPE_STEP_COUNTER -> {
if (counterSteps < 1) {
counterSteps = event.values[0].toInt()
SharedPreferencesmanager.instance.saveInitialStepCount(counterSteps)
}
stepCounter = event.values[0].toInt() - counterSteps
}
}
tv_step_count.text = "$stepCounter"
}
private fun initUI() {
startDate?.let {
tv_start_time.text = getString(R.String.start_time,AppUtils.getFormattedDate(it))
} ?: run {
tv_start_time.text = getString(R.String.start_time,"-")
}
tv_end_time.text = getString(R.String.end_time,"-")
tv_step_count.text = "$stepCounter"
if (this.isstarted) {
btn_start.text = getString(R.String.stop)
} else {
btn_start.text = getString(R.String.start)
}
}
private fun bindUI() {
btn_start.setonClickListener {
if (this.isstarted) {
stopCounter()
btn_start.text = getString(R.String.start)
} else {
startCounter()
btn_start.text = getString(R.String.stop)
}
}
}
private fun startservice() {
val stepsSensor = sensoRMANager?.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
if (stepsSensor == null) {
Toast.makeText(context,"No Step Counter Sensor !",Toast.LENGTH_SHORT).show()
} else {
sensoRMANager?.registerListener(this,stepsSensor,SensoRMANager.SENSOR_DELAY_UI)
}
}
private fun stopservice() {
sensoRMANager?.unregisterListener(this)
}
private fun startCounter() {
isstarted = true
this.stepCounter = 0
this.stepDetector = 0
this.counterSteps = 0
// reset UI
initUI()
startDate = Date()
startDate?.let {
tv_start_time.text =
getString(R.String.start_time,AppUtils.getFormattedDate(it))
SharedPreferencesmanager.instance.saveStartDate(it)
}
startservice()
}
private fun stopCounter() {
Log.d(tag,"stopCounter")
isstarted = false
endDate = Date()
endDate?.let {
tv_end_time.text =
getString(R.String.end_time,AppUtils.getFormattedDate(it))
}
stopservice()
SharedPreferencesmanager.instance.clear()
}}
这是 XML
<?xml version="1.0" enCoding="utf-8"?>
<androIDx.consTraintlayout.Widget.ConsTraintLayout xmlns:androID="http://scheR_12_11845@as.androID.com/apk/res/androID"
xmlns:app="http://scheR_12_11845@as.androID.com/apk/res-auto"
xmlns:tools="http://scheR_12_11845@as.androID.com/tools"
androID:layout_wIDth="match_parent"
androID:layout_height="match_parent"
tools:context=".ui.MainActivity"
androID:ID="@+ID/stepsContainer">
<TextVIEw
androID:ID="@+ID/title"
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
androID:layout_marginStart="8dp"
androID:layout_margintop="50dp"
androID:layout_marginEnd="8dp"
androID:text="@String/app_name"
androID:textSize="40sp"
app:layout_consTraintEnd_toEndOf="parent"
app:layout_consTraintStart_toStartOf="parent"
app:layout_consTrainttop_totopOf="parent" />
<button
androID:ID="@+ID/btn_start"
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
androID:layout_margintop="20dp"
androID:text="@String/start"
app:layout_consTraintEnd_toEndOf="parent"
app:layout_consTraintStart_toStartOf="parent"
app:layout_consTrainttop_toBottomOf="@+ID/title" />
<TextVIEw
androID:ID="@+ID/tv_start_time"
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
androID:layout_marginStart="8dp"
androID:layout_margintop="48dp"
androID:layout_marginEnd="8dp"
androID:textSize="20sp"
app:layout_consTraintEnd_toEndOf="parent"
app:layout_consTraintStart_toStartOf="parent"
app:layout_consTrainttop_toBottomOf="@+ID/btn_start"
tools:text="@String/start_time" />
<TextVIEw
androID:ID="@+ID/tv_end_time"
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
androID:layout_marginStart="8dp"
androID:layout_margintop="48dp"
androID:layout_marginEnd="8dp"
androID:textSize="20sp"
app:layout_consTraintEnd_toEndOf="parent"
app:layout_consTraintStart_toStartOf="parent"
app:layout_consTrainttop_toBottomOf="@+ID/tv_start_time"
tools:text="@String/end_time" />
<TextVIEw
androID:ID="@+ID/tv_step_count"
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
androID:layout_marginStart="8dp"
androID:layout_margintop="48dp"
androID:layout_marginEnd="8dp"
androID:textSize="35sp"
app:layout_consTraintEnd_toEndOf="parent"
app:layout_consTraintStart_toStartOf="parent"
app:layout_consTrainttop_toBottomOf="@+ID/tv_end_time"
tools:text="0" />
</androIDx.consTraintlayout.Widget.ConsTraintLayout>
可能的解决方案是使用 @H_884_9@mutableLiveData()。
它是如何工作的?
@H_884_9@mutableLiveData() 有 observe()
方法,可以在每次状态更改时收到通知。
参见this page以查看如何实现它的示例
以上是大佬教程为你收集整理的步进传感器不计入文本视图(在片段中)全部内容,希望文章能够帮你解决步进传感器不计入文本视图(在片段中)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。