android-studio - fragment.show(fragmentManager ,“confirmDelete”)错误

标签 android-studio kotlin dialogfragment

请帮助我,我是kotlin编程的新手。从今天早上开始,我遇到了这个问题,我无法解决。我不明白该错误,...这行代码是:fragment.show(fragmentManager,“confirmDelete”)

enter image description here

MainActivity.kt


import android.app.PendingIntent.getActivity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.graphics.Typeface
import androidx.core.app.ComponentActivity
import androidx.core.app.ComponentActivity.ExtraData
import androidx.core.content.ContextCompat.getSystemService
import android.icu.lang.UCharacter.GraphemeClusterBreak.T
import android.util.Log
import android.view.View
import android.widget.Button


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val user = User("ACHAKA", "Eric", 26)

        val button1 = findViewById<View>(R.id.button1)
        button1.setOnClickListener {
            println("Start 2nd activity")
            val intent = Intent(this, GreenActivity::class.java)
            intent.putExtra("user", user)
            startActivity(intent)
        }

        findViewById<View>(R.id.button2).setOnClickListener{
            val fragment = ConfirmDeleteDialogFragment()
            fragment.listener = object: ConfirmDeleteDialogFragment.ConfirmDeleteListener {
                override fun onDialogPositiveClick() {
                    Log.i("MainActivity", "onDialogPositiveClick()")
                }
                override fun onDialogNegativeClick() {
                    Log.i("MainActivity", "onDialogNegativeClick()")
                }
            }
            fragment.show(fragmentManager,"confirmDelete")

        }
    }
}

ConfirmDeleteDialogFragment.kt

import android.app.AlertDialog
import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.DialogFragment

class ConfirmDeleteDialogFragment: DialogFragment() {

    interface ConfirmDeleteListener {
        fun onDialogPositiveClick()
        fun onDialogNegativeClick()
    }

    val TAG = ConfirmDeleteDialogFragment::class.java.simpleName

    var listener: ConfirmDeleteListener? = null

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = AlertDialog.Builder(activity)
        builder.setMessage("Supprimer tout le contenu du téléphone ?")
            .setPositiveButton("Oh oui !", object: DialogInterface.OnClickListener {
                override fun onClick(dialog: DialogInterface?, id: Int) {
                    Log.i(TAG, "Youpi ! on va tout casser")
                    listener?.onDialogPositiveClick()
                }
            })
            .setNegativeButton("Euh... Non", DialogInterface.OnClickListener { dialog, id ->
                Log.i(TAG, "Bon ben ce sera pour la prochaine fois")
                dialog.dismiss()
                listener?.onDialogNegativeClick()
            })

        return builder.create()
    }


}

Logcat(错误)
:55:54.868 25808-25808/aea.com E/Zygote: v2
2019-12-23 00:55:54.883 25808-25808/aea.com E/Zygote: accessInfo : 0
2019-12-23 00:55:57.485 25808-25808/aea.com E/AndroidRuntime: FATAL EXCEPTION: main
    Process: aea.com, PID: 25808
    java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.fragment.app.FragmentTransaction androidx.fragment.app.FragmentManager.beginTransaction()' on a null object reference
        at androidx.fragment.app.DialogFragment.show(DialogFragment.java:142)
        at aea.com.MainActivity$onCreate$2.onClick(MainActivity.kt:42)
        at android.view.View.performClick(View.java:6207)
        at android.view.View$PerformClick.run(View.java:23639)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6688)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

最佳答案

不推荐使用fragmentManager:

    /**
     * Return the FragmentManager for interacting with fragments associated
     * with this activity.
     *
     * @deprecated Use {@link android.support.v4.app.FragmentActivity#getSupportFragmentManager()}
     */
    @Deprecated
    public FragmentManager getFragmentManager() {
        return mFragments.getFragmentManager();
    }

因此,您必须使用supportFragmentManager而不是fragmentManager

如果您使用fragmentManager(标记为红线,它也显示在屏幕截图中),则不会被编译。

关于android-studio - fragment.show(fragmentManager ,“confirmDelete”)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59449115/

相关文章:

android - 使用 aar 在 Android Studio 上将 Git 库与项目包含在一起?

java - Android Studio - 编译错误 : (App keeps stopping) -> RuntimeException: Unable to instantiate activity

android - Popup 出现在 DialogFragment 后面

安卓:DialogFragment.dismissInternal 处的 NullPointerException 处 DialogFragment.dismissAllow

android - 如何使我的 Horizo​​ntalBarChart 可滚动?

java - 无法在Android Studio中添加组件

安卓工作室 : How to 'Refresh' after adding file?

Kotlin - 接口(interface)方法引发的文档异常

android - 如何在 RecyclerView 列表项中包含多个 TextView

java - Android 中对话框的基类