Android StusioでRun appを実行すると `cannot find method onClickManualInputBtn() in class jp.workerapp.ui.manual.ManualInputViewModel` と表示される
解決したいこと
Android StusioでRun appを実行すると
cannot find method onClickManualInputBtn() in class jp.workerapp.ui.manual.ManualInputViewModel
と表示されてしまいます。
解決方法を教えて下さい。
発生している問題・エラー
Android StusioでRun appを実行すると
cannot find method onClickManualInputBtn() in class jp.workerapp.ui.manual.ManualInputViewModel
と表示されてしまいます。
fragment_manual_input.xml
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".ui.manual.ManualInputFragment">
<data>
<variable
name="viewModel"
type="jp.workerapp.ui.manual.ManualInputViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editTextBarcode"
android:layout_width="332dp"
android:layout_height="56dp"
android:layout_gravity="center_horizontal"
android:ems="10"
android:inputType="textEmailAddress"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints"
tools:text="a1234567890a" />
<Spinner
android:id="@+id/spn_status_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="32dp"
android:contentDescription="status"
android:minHeight="48dp"
android:selectedItemPosition="@={viewModel.statusSelectedPos}"
android:spinnerMode="dialog"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.752" />
<Button
android:id="@+id/ManualInputBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="80dp"
android:enabled="@{viewModel.isManualInputBtnEnabled()}"
android:onClick="@{()->viewModel.onClickManualInputBtn()}"
android:text="@string/send_btn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
ManualInputViewModel.kt
package jp.workerapp.ui.manual
import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import jp.postrack.workerapp.BuildConfig
import jp.postrack.workerapp.MyApplication
import jp.postrack.workerapp.network.HttpClient
import jp.postrack.workerapp.network.repository.RecordRepository
import jp.postrack.workerapp.network.request.RecordPostRequest
import jp.postrack.workerapp.utils.Event
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.lang.Exception
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import java.util.*
/**
* 手動入力画面ViewModel
*/
class ManualInputViewModel : ViewModel() {
// 送信ボタン有効無効
private val _isManualInputBtnEnabled: MutableLiveData<Boolean> = MutableLiveData(true)
val isManualInputBtnEnabled: LiveData<Boolean> = _isManualInputBtnEnabled
private val _event = MutableLiveData<Event<String>>()
private val _dialog = MutableLiveData<Event<String>>()
val dialog: LiveData<Event<String>> = _dialog
/**
* 送信ボタンクリック時
*/
fun onClickManualInputBtn(barcode: String, status: String, latitude: Double, longitude: Double) {
postRecord(barcode,
status,
latitude,
longitude
)
}
/**
* 送信処理
*/
private fun postRecord(barcode: String, status: String, latitude: Double, longitude: Double) {
val barcode = barcode.lowercase(Locale.getDefault())
Log.d("barcode", barcode)
val request = RecordPostRequest(
MyApplication.loggedInAccessKey!!,
barcode,
getTime(),
status,
String.format("%.6f", latitude).toDouble(),
String.format("%.6f", longitude).toDouble(),
BuildConfig.VERSION_NAME
)
// 送信ボタン無効化
_isManualInputBtnEnabled.postValue(false)
val repository = RecordRepository(HttpClient.retrofitInstance)
viewModelScope.launch(Dispatchers.IO) {
try {
repository.postRecord(request)
} catch (e: Exception) {
_dialog.postValue(Event(e.message.toString()))
}
}
// 送信失敗
if (barcode == null) {
_isManualInputBtnEnabled.postValue(true)
_event.postValue(Event("onSendFailed"))
return
}
SharedPrefManager(MyApplication.instance.applicationContext)
// 送信ボタン有効化
_isManualInputBtnEnabled.postValue(true)
}
/**
* スキャン日時取得
*/
private fun getTime(): String {
val dt = ZonedDateTime.now()
return dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
}
}
自分で試したこと
Android Stusioを再起動してみたり、.gradleと.ideaディレクトリを削除してみたりしました。
android:onClick="@{()->viewModel.onClickManualInputBtn()}"
にカーソルを合わせるとコードジャンプもできます。
0