程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了supportFragmentManager 不适用于 kotlin大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决supportFragmentManager 不适用于 kotlin?

开发过程中遇到supportFragmentManager 不适用于 kotlin的问题如何解决?下面主要结合日常开发的经验,给出你关于supportFragmentManager 不适用于 kotlin的解决方法建议,希望对你解决supportFragmentManager 不适用于 kotlin有所启发或帮助;

我正在尝试使用 kotlin 使用 AlertDialog 类制作自定义对话框,我是如何做到的 首先是对话框的类

class CreateDialogForProduct : AppCompatDialogFragment() {
    lateinit var nameET: EditText
    lateinit var barcodeET: EditText
    lateinit var detailsET: EditText
    lateinit var saveBtn: button


    overrIDe fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        var builder = AlertDialog.builder(activity)
        val inflater = layoutInflater
        var vIEw = inflater.inflate(R.layout.layout_dailog,null)
        builder.setVIEw(vIEw)
        builder.settitle("Save Product")
        builder.setCancelable(true)

        nameET = vIEw.findVIEwByID(R.ID.name_tv)
        barcodeET = vIEw.findVIEwByID(R.ID.barcode_tv)
        detailsET = vIEw.findVIEwByID(R.ID.details_tv)
        saveBtn = vIEw.findVIEwByID(R.ID.save_btn)

        return builder.create()
    }
}

这是我在遇到问题的活动中如何称呼它

fun openDialog(){

    val dialog = CreateDialogForProduct()
    dialog?.show(supportFragmentManager,null)

}

它给了我一个错误,没有像 supportFragmentmanger 这样的方法,我检查了这个 answer 但它的解决方案对我不起作用,有什么帮助吗?

解决方法

如果你愿意,你可以从 AppCompatActivity 扩展你的活动,这不是你的问题,但像这样声明方法,它会为你工作

fun openDialog(){
    val dialog = CreateDialogForProduct()
    dialog.show((activity as FragmentActivity).supportFragmentManager,null)

}

完整的活动课就是这样

lateinit var fab: FloaTingActionButton
lateinit var activity:Activity
var onClickListener = View.onClickListener() {
    when (it.getId()) {
        R.id.floaTingActionButton -> openDialog()
    }
}

fun openDialog(){
    val dialog = CreateDialogForProduct()
    dialog.show((activity as FragmentActivity).supportFragmentManager,null)

}
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceStatE)
        setContentView(R.layout.activity_main)
        activity = this

        fab = findViewById(R.id.floaTingActionButton)
        fab.setOnClickListener(onClickListener)
    }

}
,

supportFragmentManager中调用FragmentActivity应该没有问题。我不确定 openDialog() 是否在活动中定义。由于它是公共功能,我假设它是在对话框片段中定义的,并且您是从活动中调用它的。如果是这种情况,您应该将 openDialog() 放在您的活动类中。

编辑:您的函数超出类范围。它应该在类中像这样:

import android.app.Activity
import androidx.appcompat.app.AppCompatActivity
import android.os.bundle
import android.view.View
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import com.amin.firebasevskotlin.R
import com.amin.firebasevskotlin.utils.CreateDialogForProduct
import com.google.android.material.floaTingactionbutton.FloaTingActionButton

lateinit var fab: FloaTingActionButton

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

    fab = findViewById(R.id.floaTingActionButton)
    fab.setOnClickListener(onClickListener)
}

var onClickListener = View.onClickListener() {
    when (it.getId()) {
        R.id.floaTingActionButton -> openDialog()
    }
}

fun openDialog() {

    val dialog = CreateDialogForProduct()
    dialog?.show(supportFragmentManager,null)

}}
,

使用getActivity().getSupportFragmentManager() 要么 如果您在 api 21 中工作,请将 getSupportFragmentManager() 替换为 getFragmentManager()

大佬总结

以上是大佬教程为你收集整理的supportFragmentManager 不适用于 kotlin全部内容,希望文章能够帮你解决supportFragmentManager 不适用于 kotlin所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。