android - ボタンが期待どおりに反応しません。機能が機能していないか、または他のエラーがあるかどうかを確認しようとしています

okwaves2024-01-25  12

関数はユーザー入力を使用して計算を行い、ユーザーのテキスト ボックスに出力する必要があります。ボタンをクリックしても、まったく何も起こりません。 LogCat は何も表示しないので、この問題のトラブルシューティング方法がわかりません。同じプロジェクト内に 2 つの同様のアクティビティがあり、それらは正常に動作しているため、計算が正しく行われていない可能性があると考えられますが、他に情報が見つかりません。アドバイスをいただければ幸いです。

package com.example.awcc
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main3.*

class Setup : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)


    editTextNumber120.text.toString().toInt()
 }
}

class ThirdActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main3)

    val button2 = findViewById< Button >(R.id.button2)
    button2.setOnClickListener {
        val intent = Intent(this, SecondActivity::class.java)
        startActivity(intent)
    }
    val button3 = findViewById< Button >(R.id.button3)
    button3.setOnClickListener {
        val intent2 = Intent(this, MainActivity::class.java)
        startActivity(intent2)

        val button7 = findViewById< Button >(R.id.button35)
        button7.setOnClickListener {
                var value1 = editTextNumber120.text.toString().toInt()

                fun accessory(): Int {

                    return when {

                        value1 > 10 -> value1 * 0

                        value1 in 10..20 -> value1 * 1

                        value1 in 21..40 -> value1 * 2

                        value1 in 40..50 -> value1 * 3

                        value1 in 51..75 -> value1 * 4

                        value1 < 75 -> value1 * 5

                        else -> value1
                    }
                }

                val complete = accessory().toString()
                try {
                    editTextNumber19?.setText(complete)
                } catch (e: NumberFormatException) {
                    Toast.makeText(
                        applicationContext,
                        "Please enter a 0 in the blank field",
                        Toast.LENGTH_LONG
                    ).show()
                }
            }
        }
    }
}

なぜ button7.setOnClickListener を button3.setOnClickListener の中に入れるのですか??

– ムアード アブデルガフォー アイイタリア

2020 年 9 月 4 日 22:36

@MouaadAbdelghafourAITALI よく釣れました!この問題は修正しましたが、ボタンをクリックしても何も表示されません。単純に数学の問題なのでしょうか?正しくプログラムされていると思いますが、間違っている可能性があります。

– ブレイクワード

2020 年 9 月 4 日 22:48



------------------------

editTextNumber120 はどこで定義されていますか?このテキストは何に使用されますか?

値が伝わることを期待している場合setup アクティビティから activity3 まで、それは動作しません。各アクティビティは独自のデータを使用します。アクティビティとフラグメント間でデータを共有する必要がある場合は、その情報のデータ モデルを作成する必要があります。

例:

public class MyDataModel {
    protected MutableLiveData<Int> editTextData;

    public MyDataModel() {
        editTextData = new MutableLiveData<>();
    }

    // setter/getter - returns a LiveData object that allows
    //     you to observe the value for any changes
    // If you don't need to observe changes, then just keep it as an int/string

}

これにより、他のアクティビティは、セットアップ アクティビティで使用されているのと同じデータにアクセスできるようになります。また、これは再起動後は保持されないことにも注意してください。そのため、アプリの最後の起動で使用された以前のデータをセットアップに含めたい場合は、SharedPreferences を検討してください。

また、アプリの構造はわかりませんが、なぜこれほど多くのアクティビティが必要なのか疑問に思います。私が取り組んでいるアプリはかなり堅牢ですが、アクティビティ (いくつかのフラグメントを含む) と、設定用のアクティビティが 1 つしかなく、それだけです。

2

こんにちは、ご返答ありがとうございます。 3 つのアクティビティを含む構造に関しては、各ページに異なる入力ボックス (コミッション支払いの 3 つの異なる形式があります) があるため、計算しようとしているものに応じて入力ボックスを切り替えることができます。これは最も効率的な方法ではないかもしれません (私は初心者で、これが最初のアプリの最初の更新です。) edittextnumber120 については、開発の初期にテストとして使用していて削除するのを忘れていたため、削除する必要があります。それは...きれいなコードをもっと上手くなる必要があります。そして、ヒントをありがとうSharedPreferences。それが次に予定されている更新だったからです。

– ブレイクワード

2020 年 9 月 4 日 23:56

そのため、毎回再入力する必要はありませんでした。実際、あなたのコメントを読んだ直後に私が抱えていた問題を解決することができました。 val の代わりに var を使用していたため、計算が適切に処理されませんでした。

– ブレイクワード

2020 年 9 月 4 日 23:59



------------------------

私の後ろで誰かがこの問題に遭遇した場合の答えを見つけました。 Val の代わりに Var を使用していたので、実際には var を乗算したり変更したりしていませんでした。 Val に変更すると、魔法のように機能します。

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。