在 Activity 中调用片段方法不工作 kotlin
calling fragment method in Activity not working kotlin
我需要在activity中调用片段方法...
FirstFragment.kt
class FirstFragment: Fragment() {
fun getToast(context: Context) {
return Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show()
}
}
MainActivity.kt
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragment_container, FirstFragment, FistFragmentTAG_NAME)
transaction.commit()
//expecting to use fragment method...
parameter.getToast() //parameter is the code neede to call FirstFragment method .getToast()
}
}
我试过这3种情况都没有成功
我试过:(它使应用程序崩溃)
FirstFragment().getToast(this@MainActivity)
也试过了,但是函数.getToast()
出现红色
val myToast = supportFragmentManager.findFragmentByTag(FistFragmentTAG_NAME).getToast(this@MainActivity)
也试过了,但是函数.getToast()
也显示为红色
supportFragmentManager.fragments.forEach { it: Fragment
val getToast = it.getToast(this@MainActivity)
这里的问题不是 context
,因为实际上,我正在尝试调用一个根本不使用上下文的方法...在此示例中设置上下文只是为了调用 Toast
.
如何调用片段方法?*
这是activityclass
class MyActivity : AppCompatActivity() {
private lateinit var myFragment: FirstFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
myFragment = FirstFragment()
supportFragmentManager
.beginTransaction()
.add(R.id.fragment_container, myFragment , "MyFragment")
.commit()
//this is fragment method, we call it from activity
myFragment.getToast(this)
}
}
这是片段class
class FirstFragment: Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
fun getToast(context: Context) {
Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show()
}
}
我需要在activity中调用片段方法...
FirstFragment.kt
class FirstFragment: Fragment() {
fun getToast(context: Context) {
return Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show()
}
}
MainActivity.kt
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragment_container, FirstFragment, FistFragmentTAG_NAME)
transaction.commit()
//expecting to use fragment method...
parameter.getToast() //parameter is the code neede to call FirstFragment method .getToast()
}
}
我试过这3种情况都没有成功
我试过:(它使应用程序崩溃)
FirstFragment().getToast(this@MainActivity)
也试过了,但是函数
.getToast()
出现红色val myToast = supportFragmentManager.findFragmentByTag(FistFragmentTAG_NAME).getToast(this@MainActivity)
也试过了,但是函数
.getToast()
也显示为红色supportFragmentManager.fragments.forEach { it: Fragment val getToast = it.getToast(this@MainActivity)
这里的问题不是 context
,因为实际上,我正在尝试调用一个根本不使用上下文的方法...在此示例中设置上下文只是为了调用 Toast
.
如何调用片段方法?*
这是activityclass
class MyActivity : AppCompatActivity() {
private lateinit var myFragment: FirstFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
myFragment = FirstFragment()
supportFragmentManager
.beginTransaction()
.add(R.id.fragment_container, myFragment , "MyFragment")
.commit()
//this is fragment method, we call it from activity
myFragment.getToast(this)
}
}
这是片段class
class FirstFragment: Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
fun getToast(context: Context) {
Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show()
}
}