testkun123
@testkun123 (T K)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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

1Answer

android:onClick="@{()->viewModel.onClickManualInputBtn()}"
この書き方ですと引数無しの呼び方になってそうです。

1Like

Comments

  1. @testkun123

    Questioner

    @isshy_exception様
    ご返信いただきありがとうございます。
    おかげさまで解決することができました、ありがとうございました。

Your answer might help someone💌