button.setOnLongClickListener()函数不起作用。

huangapple go评论90阅读模式
英文:

button.setOnLongClickListener() function is not working

问题

Sure, here's the translated code portion:

  1. class MainActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. setContentView(R.layout.activity_main)
  5. btntoste.setOnClickListener {
  6. Toast.makeText(this, "this is default toast", Toast.LENGTH_SHORT).show()
  7. }
  8. btntoste.setOnLongClickListener {
  9. Toast(this).apply {
  10. duration = Toast.LENGTH_LONG
  11. view = layoutInflater.inflate(R.layout.custom_toast, layconstrain)
  12. show()
  13. }
  14. true
  15. }
  16. }
  17. }

Please note that I've translated the code as requested, but there might still be issues in your code related to the btntoste and layconstrain elements, which could lead to runtime errors. Make sure those elements are correctly defined in your XML layout file and initialized in your code.

英文:

I want to show a default toast if a button is clicked once and a custom toast if the button is long-clicked. The default toast works but the custom toast doesn't:

  1. class MainActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. setContentView(R.layout.activity_main)
  5. btntoste.setOnClickListener {
  6. Toast.makeText(this,"this is defult toaste",Toast.LENGTH_SHORT)
  7. }
  8. btntoste.setOnLongClickListener {
  9. Toast(this).apply {
  10. duration = Toast.LENGTH_LONG
  11. view = layoutInflater.inflate(R.layout.custom_toaste, layconstrain)
  12. show()
  13. }
  14. }
  15. }
  16. }

The logcat error:

  1. failed to add asset path /data/app/com.sumita.toaste-wg1Yd4-KC7e1sn36eDPchA==/base.apk
  2. 2023-05-10 11:58:44.858 18737-18737 ResourcesManager pid-18737 E failed to add asset path /data/app/com.sumita.toaste-wg1Yd4-KC7e1sn36eDPchA==/base.apk
  3. 2023-05-10 11:58:44.861 18737-18737 ResourcesManager pid-18737 E failed to add asset path /data/app/com.sumita.toaste-wg1Yd4-KC7e1sn36eDPchA==/base.apk
  4. 2023-05-10 11:58:45.088 2461-2501 ActivityThread com.sumita.toaste E Failed to find provider info for cn.teddymobile.free.anteater.den.provider
  5. 2023-05-10 11:58:45.229 2461-2461 AndroidRuntime com.sumita.toaste E FATAL EXCEPTION: main
  6. Process: com.sumita.toaste, PID: 2461
  7. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sumita.toaste/com.sumita.toaste.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
  8. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2994)
  9. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3072)
  10. at android.app.ActivityThread.-wrap11(Unknown Source:0)
  11. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1766)
  12. at android.os.Handler.dispatchMessage(Handler.java:106)
  13. at android.os.Looper.loop(Looper.java:214)
  14. at android.app.ActivityThread.main(ActivityThread.java:6977)
  15. at java.lang.reflect.Method.invoke(Native Method)
  16. at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:528)
  17. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:910)
  18. Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
  19. at com.sumita.toaste.MainActivity.onCreate(MainActivity.kt:17)
  20. at android.app.Activity.performCreate(Activity.java:7227)
  21. at android.app.Activity.performCreate(Activity.java:7218)
  22. at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
  23. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2947)
  24. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3072) 
  25. at android.app.ActivityThread.-wrap11(Unknown Source:0) 
  26. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1766) 
  27. at android.os.Handler.dispatchMessage(Handler.java:106) 
  28. at android.os.Looper.loop(Looper.java:214) 
  29. at android.app.ActivityThread.main(ActivityThread.java:6977) 
  30. at java.lang.reflect.Method.invoke(Native Method) 
  31. at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:528) 
  32. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:910) 

activity_main.xml:

  1. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:app="http://schemas.android.com/apk/res-auto"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".MainActivity">
  7. <Button
  8. android:id="@+id/btntoste"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="Show Toste"
  12. app:layout_constraintBottom_toBottomOf="parent"
  13. app:layout_constraintEnd_toEndOf="parent"
  14. app:layout_constraintHorizontal_bias="0.498"
  15. app:layout_constraintStart_toStartOf="parent"
  16. app:layout_constraintTop_toTopOf="parent"
  17. app:layout_constraintVertical_bias="0.266"
  18. android:backgroundTint="@color/material_dynamic_neutral50"
  19. android:textColor="@color/white"/>
  20. </androidx.constraintlayout.widget.ConstraintLayout>

Custom toast layout:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="wrap_content"
  6. android:layout_height="wrap_content"
  7. android:id="@+id/layconstrain"
  8. android:padding="16dp"
  9. android:background="@color/material_dynamic_neutral70">
  10. <ImageView
  11. android:id="@+id/imageView"
  12. android:layout_width="100dp"
  13. android:layout_height="100dp"
  14. android:src="@drawable/ic_baseline_circle_notifications_24"
  15. app:layout_constraintStart_toStartOf="parent"
  16. app:layout_constraintTop_toTopOf="parent" />
  17. <TextView
  18. android:id="@+id/txtcucont"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:layout_marginStart="16dp"
  22. android:text="Hay this is custom toaste"
  23. android:textSize="15sp"
  24. android:textColor="@color/purple_700"
  25. app:layout_constraintBottom_toBottomOf="@+id/imageView"
  26. app:layout_constraintStart_toEndOf="@+id/imageView"
  27. app:layout_constraintTop_toTopOf="parent"
  28. app:layout_constraintVertical_bias="0.583" />
  29. </androidx.constraintlayout.widget.ConstraintLayout>

答案1

得分: 1

需要在 setOnLongClickListener 方法中返回布尔值。我正在使用 viewBinding 来获取视图。尝试这样做

  1. import android.os.Bundle
  2. import android.widget.Toast
  3. import androidx.appcompat.app.AppCompatActivity
  4. import com.umesh.testapp.databinding.ActivityMainBinding
  5. import com.umesh.testapp.databinding.CustomToasteBinding
  6. class MainActivity : AppCompatActivity() {
  7. lateinit var binding: ActivityMainBinding
  8. override fun onCreate(savedInstanceState: Bundle?) {
  9. super.onCreate(savedInstanceState)
  10. binding = ActivityMainBinding.inflate(layoutInflater)
  11. setContentView(binding.root)
  12. binding.btntoste.setOnClickListener {
  13. Toast.makeText(this, "这是默认吐司", Toast.LENGTH_SHORT)
  14. }
  15. binding.btntoste.setOnLongClickListener {
  16. val customToasteBinding = CustomToasteBinding.inflate(layoutInflater)
  17. Toast(applicationContext).apply {
  18. duration = Toast.LENGTH_LONG
  19. view = customToasteBinding.root
  20. show()
  21. }
  22. return@setOnLongClickListener true
  23. }
  24. }
  25. }
英文:

You need to return boolean value in setOnLongClickListener method like that. I am using viewBinding to fetch view. Try this

  1. import android.os.Bundle
  2. import android.widget.Toast
  3. import androidx.appcompat.app.AppCompatActivity
  4. import com.umesh.testapp.databinding.ActivityMainBinding
  5. import com.umesh.testapp.databinding.CustomToasteBinding
  6. class MainActivity : AppCompatActivity() {
  7. lateinit var binding: ActivityMainBinding
  8. override fun onCreate(savedInstanceState: Bundle?) {
  9. super.onCreate(savedInstanceState)
  10. binding = ActivityMainBinding.inflate(layoutInflater)
  11. setContentView(binding.root)
  12. binding.btntoste.setOnClickListener {
  13. Toast.makeText(this,"this is defult toaste",Toast.LENGTH_SHORT)
  14. }
  15. binding.btntoste.setOnLongClickListener {
  16. val customToasteBinding = CustomToasteBinding.inflate(layoutInflater)
  17. Toast(applicationContext).apply {
  18. duration = Toast.LENGTH_LONG
  19. view = customToasteBinding.root
  20. show()
  21. }
  22. return@setOnLongClickListener true
  23. }
  24. }
  25. }

答案2

得分: 0

根据错误信息,btntoste 变量具有 null 值。这是因为您尚未为 btntoste 变量分配值。要解决这个问题:

  1. class MainActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. setContentView(R.layout.activity_main)
  5. // 通过其id访问按钮
  6. val toastBtn = findViewById<Button>(R.id.btntoste)
  7. // 显示默认提示
  8. toastBtn.setOnClickListener {
  9. Toast.makeText(this, "这是默认提示", Toast.LENGTH_SHORT).show()
  10. }
  11. // 显示自定义提示
  12. toastBtn.setOnLongClickListener {
  13. Toast(this).apply {
  14. duration = Toast.LENGTH_LONG
  15. view = layoutInflater.inflate(R.layout.custom_toaste, layconstrain)
  16. show()
  17. }
  18. return@setOnLongClickListener true
  19. }
  20. }
  21. }

当使用 setOnLongClickListener() 函数时,您还需要返回一个布尔值。

英文:

According to the error, the btntoste variable has a null value. That's because you haven't assigned the btntoste variable. To solve that:

  1. class MainActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. setContentView(R.layout.activity_main)
  5. //Access the Button using its id
  6. val toastBtn = findViewById&lt;Button&gt;(R.id.btntoste)
  7. //Display default toast
  8. toastBtn.setOnClickListener {
  9. Toast.makeText(this,&quot;this is defult toaste&quot;,Toast.LENGTH_SHORT)
  10. }
  11. //Display custom toast
  12. toastBtn.setOnLongClickListener {
  13. Toast(this).apply {
  14. duration = Toast.LENGTH_LONG
  15. view = layoutInflater.inflate(R.layout.custom_toaste, layconstrain)
  16. show()
  17. }
  18. return@setOnLongClickListener true
  19. }
  20. }
  21. }

You also need to return a boolean value when using the setOnLongClickListener() function.

huangapple
  • 本文由 发表于 2023年5月10日 14:31:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/76215481.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定