Kotlin:在片段中打开新的Activity

时间:2018-11-17 21:36:10

标签: android android-fragments kotlin

使用按钮时,如何在片段内打开新的活动?

我尝试过

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    LogOut_btn.setOnClickListener {
        //FirebaseAuth.getInstance().signOut()
         val intent = Intent (this, Main::class.java)
        startActivity(intent)



    }



}

val intent =意图似乎在片段中不起作用。

您知道如何在片段中开始新活动吗?

我很感谢我收到的每一个答案,也感谢您的帮助!

16 个答案:

答案 0 :(得分:4)

您可以在Kotlin中进行类似的操作

YourButton.setOnClickListener{
            requireActivity().run{
                startActivity(Intent(this, NeededActivity::class.java))
                finish()
            }
        }

答案 1 :(得分:1)

由于Fragment的类型不是Context,因此您需要调用父级Activity

 val intent = Intent (getActivity(), Main::class.java)
 getActivity().startActivity(intent)

或类似的东西

activity?.let{
    val intent = Intent (it, Main::class.java)
    it.startActivity(intent)
}

答案 2 :(得分:1)

尝试从片段中获取上下文

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  super.onViewCreated(view, savedInstanceState)

  LogOut_btn.setOnClickListener {
    //FirebaseAuth.getInstance().signOut()
     val intent = Intent (view.context, Main::class.java)
    startActivity(intent)
  }
}

答案 3 :(得分:1)

val intent = Intent (getActivity(), NextActivity::class.java)
getActivity()?.startActivity(intent)

这将完成工作。

getActivity()是从Fragment和getActivity()强制转换的吗?避免NPE

答案 4 :(得分:1)

在意图之前

FirebaseAuth.getInstance()。signOut()。

答案 5 :(得分:1)

对我来说,我就是这么做的,并且奏效了

val intent = Intent(AppName.applicationContext(), YourAppName::class.java)
activity?.startActivity(intent)

您可以将此代码添加到片段中

AppName

这是应用程序名称,其中包含context之类的全局伴随对象

答案 6 :(得分:1)

这是我在尝试获得与工作类似的东西时发现的解决方案。

view.findViewById<Button>(R.id.button_second).setOnClickListener {
  val i = Intent(activity, ClassNameOfActivityIWantToGoTo::class.java)
  activity?.startActivity(i)
}

答案 7 :(得分:1)

val  intent = Intent(activity, AttachmentActivity::class.java)
            activity!!.startActivity(intent)
             activity!!.finish()

答案 8 :(得分:0)

我相信这会像

activity?.let { callingActivity -> startActivity(Intent(callingActivity, Main::class.java)) }

您必须使用呼叫活动context

答案 9 :(得分:0)

您的代码差不多完成了,您只需要传递片段实例作为Intent的第一个参数,将@strong后面的片段名称替换为 YourFragmentName

val intent = Intent (this@YourFragmentName.context, Main::class.java)
startActivity(intent)

看看下面的示例:

class MyFragment: Fragment(){

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        val intent = Intent (this@MyFragment.context, YOUR_NEXT_ACTIVITY_CLASS::class.java)
        startActivity(intent)
    }
}

答案 10 :(得分:0)

如果仅使用activity,则仅返回一个Activity实例。这可以是嵌入片段的任何活动,因此在某些情况下,您可以获取FragmentActivity而不是父活动。使用它来获得正确的信息:

(activity as YourParentActivity)?.let{
    val intent = Intent (it, Main::class.java)
    it.startActivity(intent)
}

答案 11 :(得分:0)

kotlinfragment)中: 在您的setOnClickListenerButton的{​​{1}}方法中编写此代码

View

答案 12 :(得分:0)

还有一个选项(对于Kotlin)。 在onCreateView中,为按钮设置onClickListener:

button.setOnClickListener {
    requireActivity().run {
        startActivity(Intent(this, MainActivity::class.java))
        finish() // If activity no more needed in back stack
    }
}

答案 13 :(得分:0)

放入

LogOut_btn.setOnClickListener {
        //FirebaseAuth.getInstance().signOut()
         val intent = Intent (this, Main::class.java)
        startActivity(intent)



    }

在加载片段的Activity的onCreate方法内部

答案 14 :(得分:0)

 val intent = Intent (getActivity(), Main::class.java)
 getActivity().startActivity(intent)

答案 15 :(得分:-1)

 override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment 

val view = inflater.inflate(R.layout.YourFragmentLayout, container, false)

    view.button.setOnClickListener {
        val intent = Intent(requireContext(), YourActivity::class.java)
        startActivity(intent)

    }


    return view

}