Как с помощью кнопки открыть новое действие внутри фрагмента?
Я пробовал это
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 doesn't seem to work in a fragment.
Есть идеи, как я могу начать новую деятельность внутри фрагмента?
Я считаю, что это будет что-то вроде
activity?.let { callingActivity -> startActivity(Intent(callingActivity, Main::class.java)) }
Вы должны использовать вызывающие действия context
Спасибо за ваши усилия, но приложение по-прежнему вылетает
Ваш код почти готов, вам просто нужно передать экземпляр фрагмента в качестве первого параметра 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)
}
}
Прежде всего, я хочу поблагодарить вас за попытку помочь мне, но когда я помещаю туда свое имя фрагмента, намерение перестает работать и становится красным подчеркиванием.
извините, он все еще рушится. Должен ли я даже ездить на этом в увлекательной игре на ViewCreated или в чем-то еще. Может, не надо так делать с фрагментом
Я добавил еще один образец
Почему именно class.java для вашего следующего занятия? Я думал, мы написали это на котлине?
Поскольку 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)
}
Спасибо за ваше предложение, но приложение по-прежнему вылетает, когда я открываю действие, в котором показан фрагмент, начинается
Какое исключение вы получаете? может вы забыли указать активность в манифесте?
Я самый тупой человек во вселенной. У меня есть 3 фрагмента и я все время писал не в том. Очень сожалею о моей глупости. Спасибо за помощь мне
Неа. ты просто еще один человек во вселенной. ?
Спасибо @dasfima, все еще отлично работает !!
Это не работает для меня. Может быть, у меня фрагмент не кнопка?
Если вы используете только activity, возвращает только экземпляр Activity. Это может быть любое действие, которое включает ваш фрагмент, поэтому в некоторых случаях вы можете получить FragmentActivity вместо родительского действия. Используйте это, чтобы убедиться, что вы получаете правильный:
(activity as? YourParentActivity)?.let{
val intent = Intent (it, Main::class.java)
it.startActivity(intent)
}
Вам необходимо переместить ?, иначе это вызовет исключение приведения, когда этот фрагмент прикреплен к чему-то другому, кроме YourParentActivity.. Используйте (activity as? YourParentActivity). И, конечно, нам нужно вообще приведение типов только в том случае, если нам нужно вызвать функцию, которая является конкретным методом YourParentActivity.
Вы совершенно правы @ Tenfour04. Спасибо за предложение :)
Тоже вариант (для котлина). В onCreateView установите onClickListener для кнопки:
button.setOnClickListener {
requireActivity().run {
startActivity(Intent(this, MainActivity::class.java))
finish() // If activity no more needed in back stack
}
}
Положи это
LogOut_btn.setOnClickListener {
//FirebaseAuth.getInstance().signOut()
val intent = Intent (this, Main::class.java)
startActivity(intent)
}
внутри метода onCreate Activity, в который загружается фрагмент
Вместо этого попробуйте получить контекст из фрагмента
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)
}
}
val intent = Intent (getActivity(), NextActivity::class.java)
getActivity()?.startActivity(intent)
Это сделает работу.
getActivity (), взятый из фрагмента и getActivity ()? чтобы избежать НПЭ
Надеюсь, поможет :)
Хотя этот код может решить вопрос, включая объяснение о том, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов за. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста, редактировать свой ответ, чтобы добавить пояснения и указать, какие ограничения и предположения применяются.
Богдан Опир бесполезно tbh.
FirebaseAuth.getInstance (). SignOut () перед намерением.
Ты можешь делать что-то подобное в Котлине
YourButton.setOnClickListener{
requireActivity().run{
startActivity(Intent(this, NeededActivity::class.java))
finish()
}
}
Для меня я просто сделал это, и это сработало
val intent = Intent(AppName.applicationContext(), YourAppName::class.java)
activity?.startActivity(intent)
Вы можете добавить этот код в свой фрагмент
AppName
Это имя приложения, которое содержит глобальный объект-компаньон, например context.
Вот решение, которое я нашел, пытаясь заставить что-то подобное работать.
view.findViewById<Button>(R.id.button_second).setOnClickListener {
val i = Intent(activity, ClassNameOfActivityIWantToGoTo::class.java)
activity?.startActivity(i)
}
val intent = Intent(activity, AttachmentActivity::class.java)
activity!!.startActivity(intent)
activity!!.finish()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate (R.layout.YourFragmentLayout, контейнер, ложь)
view.button.setOnClickListener {
val intent = Intent(requireContext(), YourActivity::class.java)
startActivity(intent)
}
return view
}
val intent = Intent (getActivity(), Main::class.java)
getActivity().startActivity(intent)
Добро пожаловать в Stack Overflow! Хотя ваш ответ может решить вопрос, включая объяснение о том, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов за. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Вы можете отредактировать свой ответ, чтобы добавить пояснения и указать, какие ограничения и предположения применяются. - Из обзора
getActivity().startActivity(intent)