Java 考虑到片段和活动的创建顺序,我如何管理它们? 我想做什么

Java 考虑到片段和活动的创建顺序,我如何管理它们? 我想做什么,java,android-fragments,kotlin,android-fragmentactivity,android-viewmodel,Java,Android Fragments,Kotlin,Android Fragmentactivity,Android Viewmodel,我想从Fragment调用Activity,以便在Android应用程序中同时实现片段和活动之间的转换 我已经成功地从片段文件调用了活动文件上的一个特定方法,但从片段调用整个活动时遇到了问题 SampleFragment - MainActivity's fragmentMethod() is called once the button is clicked on the page Sample1Fragment - FormActivity is called once the butto

我想从Fragment调用Activity,以便在Android应用程序中同时实现片段和活动之间的转换

我已经成功地从片段文件调用了活动文件上的一个特定方法,但从片段调用整个活动时遇到了问题

SampleFragment - MainActivity's fragmentMethod() is called once  the button is clicked on the page
Sample1Fragment - FormActivity is called once the button is clicked on the page
FormActivity - FormActivity2 is called once the button is clicked on the page
以上与我先前的问题相同:

错误和问题 成功地构建了一个项目并在模拟器上运行了应用程序。然而,当我点击按钮调用Sample1Fragment上的FormActivity时,屏幕突然关闭

我无法解决这个问题

发送至Sample1Fragment.kt上以下部件的错误消息

Modifier 'override' is not applicable to 'local function'
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        override fun onViewCreated(view: View, savedInstanceState: Bundle) {
            btnClick2.setOnClickListener(object:View.OnClickListener{

                // here I would like to move to FormActivity
                override fun onClick(v: View?) {
                    activity?.startActivity(Intent(context, FormActivity::class.java))
                }

            })
        }
Sample1Fragment.kt

Modifier 'override' is not applicable to 'local function'
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        override fun onViewCreated(view: View, savedInstanceState: Bundle) {
            btnClick2.setOnClickListener(object:View.OnClickListener{

                // here I would like to move to FormActivity
                override fun onClick(v: View?) {
                    activity?.startActivity(Intent(context, FormActivity::class.java))
                }

            })
        }
现行代码 MainActivity.kt

导入androidx.appcompat.app.appcompat活动
导入android.os.Bundle
导入android.widget.Toast
导入androidx.fragment.app.fragment
导入kotlinx.android.synthetic.main.activity\u main*
类MainActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//把碎片列出来
val fragmentList=arrayListOf(
SampleFragment(),
样本1碎片()
)
//创建适配器的实例
val适配器=SamplePagerAdapter(supportFragmentManager,fragmentList)
///设置适配器
viewPager.adapter=适配器
}
公共娱乐片段法(){
Toast.makeText(this@MainActivity,“从片段调用的方法”,Toast.LENGTH_LONG.show();
}
}
SampleFragment.kt

Modifier 'override' is not applicable to 'local function'
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        override fun onViewCreated(view: View, savedInstanceState: Bundle) {
            btnClick2.setOnClickListener(object:View.OnClickListener{

                // here I would like to move to FormActivity
                override fun onClick(v: View?) {
                    activity?.startActivity(Intent(context, FormActivity::class.java))
                }

            })
        }
导入android.os.Bundle
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入androidx.fragment.app.fragment
导入kotlinx.android.synthetic.main.fragment_示例*
类SampleFragment:Fragment(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
争论?让我们{
}
}
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
//为该碎片膨胀布局
返回充气机。充气(R.layout.fragment_样品,容器,假)
}
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
super.onActivityCreated(savedInstanceState)
btnClick.setOnClickListener(对象:View.OnClickListener{
覆盖有趣的onClick(v:视图?){
(活动作为主活动)。fragmentMethod()
}
})
}
}
Sample1Fragment.kt

Modifier 'override' is not applicable to 'local function'
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        override fun onViewCreated(view: View, savedInstanceState: Bundle) {
            btnClick2.setOnClickListener(object:View.OnClickListener{

                // here I would like to move to FormActivity
                override fun onClick(v: View?) {
                    activity?.startActivity(Intent(context, FormActivity::class.java))
                }

            })
        }
导入android.os.Bundle
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入androidx.fragment.app.fragment
导入kotlinx.android.synthetic.main.fragment_sample1*
导入android.content.Intent
类Sample1Fragment:Fragment(){
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
//为该碎片膨胀布局
返回充气机。充气(R.layout.fragment_样本1,容器,假)
}
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
super.onActivityCreated(savedInstanceState)
覆盖已创建的视图(视图:视图,savedInstanceState:Bundle){
btnClick2.setOnClickListener(对象:View.OnClickListener{
//在这里,我想谈谈形式活动
覆盖有趣的onClick(v:视图?){
活动?.startActivity(意图(上下文,FormActivity::class.java))
}
})
}
}
}
发展环境 Android Studio 3.6.1

我想做什么 它试图使用回答中推荐的
SingleLiveEvent
,但我还没有找到在我当前的代码
ListViewModel.kt
Sample1Fragment.kt
上实现它的适当方法

参考:

ListViewModel.kt

导入android.app.usage.UsageEvents
导入android.os.Build
导入androidx.annotation.RequiresApi
导入androidx.lifecycle.LiveData
导入androidx.lifecycle.MutableLiveData
导入androidx.lifecycle.ViewModel
类ListViewModel:ViewModel(){
private val_navigateToDetails=MutableLiveData()
val navigateToDetails:LiveData
get()=\u导航到详细信息
@RequiresApi(Build.VERSION\u code.LOLLIPOP)
趣味用户ClicksOnButton(itemId:String){
_导航详细信息.value=
Event(itemId)//通过将新事件设置为新值来触发事件
}
}
这些是我面临的错误消息

Sample1Fragment.kt

Modifier 'override' is not applicable to 'local function'
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        override fun onViewCreated(view: View, savedInstanceState: Bundle) {
            btnClick2.setOnClickListener(object:View.OnClickListener{

                // here I would like to move to FormActivity
                override fun onClick(v: View?) {
                    activity?.startActivity(Intent(context, FormActivity::class.java))
                }

            })
        }
导入android.os.Bundle
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入androidx.fragment.app.fragment
导入kotlinx.android.synthetic.main.fragment_sample1*
导入android.content.Intent
类Sample1Fragment:Fragment(){
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
//为该碎片膨胀布局
返回充气机。充气(R.layout.fragment_样本1,容器,假)
}
myViewModel.navigateToDetails.observe(这个,观察者{
it.getContentIfNotHandled()?。让{//仅在从未处理过事件时继续
已创建视图(视图:视图,保存状态:捆绑){
btnClick2.setOnClickListener(对象:View.OnClickListener{
//在这里,我想谈谈形式活动
覆盖有趣的onClick(v:视图?){
活动?.startActivity(意图(上下文,FormActivity::class.java))
}
})
}
})
}
}
这是我面临的错误消息