>

내 대화 상자 조각을 로그인 조각으로 호출하려고하고 경고 대화 상자를 표시하려고하면 show 메소드에 다음과 같이 표시됩니다.

와이즈 비즈

None of the following functions can be called with the arguments supplied. show(FragmentManager!, String!) defined in org.greenstand.android.TreeTracker.fragments.CustomDialogFragment show(FragmentTransaction!, String!) defined in org.greenstand.android.TreeTracker.fragments.CustomDialogFragment

내 CustomDialogFragment 코드는 다음과 같습니다.

val newFragment = CustomDialogFragment.newInstance("pass content here")
val fm = fragmentManager
newFragment.show(fm, "look")

누군가가 show 메소드에 정확히 전달해야하는 것을 나타낼 수 있습니까? 어떤 도움이라도 감사합니다 :)

import android.app.Activity import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.fragment_login.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.greenstand.android.TreeTracker.R import org.greenstand.android.TreeTracker.application.Permissions import org.greenstand.android.TreeTracker.utilities.* import org.greenstand.android.TreeTracker.viewmodels.LoginViewModel import org.koin.android.viewmodel.ext.android.viewModel import timber.log.Timber class CustomDialogFragment : DialogFragment() { private var content: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) content = arguments!!.getString("content") val style = DialogFragment.STYLE_NO_FRAME val theme = R.style.DialogTheme setStyle(style, theme) } override fun onAttach(context: Context) { super.onAttach(context) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle): View { val view = inflater!!.inflate(R.layout.layout_dialog, container, false) val btnAccept = view.findViewById<View>(R.id.buttonAccept) as Button val textViewContent = view.findViewById<View>(R.id.textViewContent) as TextView textViewContent.text = content; btnAccept.setOnClickListener{ dismiss(); } return view; } companion object { fun newInstance(content: String) : CustomDialogFragment { val f = CustomDialogFragment() val args = Bundle() args.putString("content", content) f.arguments = args return f } } }

  • 답변 # 1

    [업데이트] 문제는 방법이 FragmentManager 를받을 수 있다는 것입니다  하지만 감사 할 필요는 없습니다. 오류와 감사하지 않는 Kotlin 기호를 살펴보세요

    FragmentManager!

    그래서 할 수있어

    fm?.let {newFragment.show(fm, "your tag")}
    
    

    Noushad Hasan 답변의 의견을 참조하십시오

    당신은 FragmentManager 를 통과하고 있습니다  이 방법에는 FragmentTransaction 가 필요합니다.  그리고 String  태그로 :

    val transaction = supportFragmentManager.beginTransaction()
    newFragment.show(transaction, "SOME_TAG")
    
    

    몇 가지 제안 :

    당신은 당신을 DialogFragment 만들 수 있습니다  Kotlin 표준 기능을 사용하여 더 많은kotliny

    companion object {
            private const val KEY = "param1"
            @JvmStatic
            fun newInstance(param1: String) =
                ExampleDialogFragment().apply {
                    arguments = Bundle().apply {
                        putString(KEY, param1)
                    }
                }
        }
    
    

    Fragment 를 만들어 좋은 예를 얻을 수 있습니다  Android Studio 마법사를 사용하고 공장 방법 옵션 확인

    또한 태그가 당신의 DialogFragment 를위한 것이기 때문에  공개 상수로 만들 수 있습니다 :

    companion object {
            const val TAG = "TAG"
     }
    
    

    대화 상자 조각이 이미 있는지 다시 확인하고 제거하여 실제로 새 대화 상자로 작동하고 싶을 수도 있습니다

           val transaction = supportFragmentManager.beginTransaction()
            val previous = supportFragmentManager.findFragmentByTag(ExampleDialogFragment.TAG)
            if (previous != null) {
                transaction.remove(previous)
            }
            transaction.addToBackStack(null)
            val dialogFragment = ExampleDialogFragment.newInstance("parameter")
            dialogFragment.show(transaction, ExampleDialogFragment.TAG)
    
    

  • 답변 # 2

    활동이 https://developer.android.com/reference/androidx/fragment/app/FragmentActivity.html의 하위 항목인지 확인하십시오. 예를 들어 https : // developer를 사용할 수 있습니다. 부모 활동으로서 android.com/reference/androidx/appcompat/app/AppCompatActivity.

    그런 다음 fragmentManager를 얻으려면 getSupportFragment() 를 사용하십시오.  방법 또는 그냥 val fm = supportFragmentManager

  • 답변 # 3

    DialogFragment 가 보이지 않습니다  당신의 customDialog() 에 수입  수업. 실제로 line no: 9 에 Fragment import가 있습니다. . 올바른 DialogFragment 에서 확장하고 있습니까? ?

  • 이전 css - 미디어 쿼리를 사용하는 MuiTab과 같은 구성 요소 재정의
  • 다음 java - Gradle의 jacoco 플러그인에서 생성 된 sourceSet를 제외하는 방법