web-dev-qa-db-ja.com

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 = Intentはフラグメントでは機能しないようです。

フラグメント内で新しいアクティビティを開始するにはどうすればよいですか?

私は私が得たすべての答えに感謝し、あなたの助けをありがとう!

4

FragmentContextタイプではないため、親Activityを呼び出す必要があります。

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

または多分何か

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

これ入れて

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



    }

フラグメントが読み込まれるアクティビティのonCreateメソッド内

0
Emma Borkent

代わりにフラグメントからコンテキストを取得してみてください

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)
  }
}
0
Lenos

activityのみを使用すると、Activityインスタンスのみが返されます。これはフラグメントを埋め込む任意のアクティビティにすることができるため、場合によっては親アクティビティの代わりにFragmentActivityを取得できます。これを使用して、正しいものを取得しています:

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

オプション(kotlin用)。 onCreateViewで、ボタンのonClickListenerを設定します。

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

それは次のようなものになると思います

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

呼び出しアクティビティcontextを使用する必要があります

0
Blue Jones

コードはほぼ完成しました。フラグメントインスタンスをIntentの最初のパラメータとして渡す必要がありますYourFragmentNameを@の後のフラグメント名に置き換えてください:

val intent = Intent ([email protected], Main::class.Java)
startActivity(intent)

次のサンプルサンプルをご覧ください。

class MyFragment: Fragment(){

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

        val intent = Intent ([email protected], YOUR_NEXT_ACTIVITY_CLASS::class.Java)
        startActivity(intent)
    }
}
0
Pedro Massango