如何解决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()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。