В моем приложении есть основное действие, когда я перехожу от основного действия к трипактивности
а в трипактивности есть нижняя навигация и три фрагмента, в которых я блокирую один фрагмент по умолчанию и два фрагмента с помощью нижних щелчков. p>
здесь предположим, что основным фрагментом является A, и я перемещаюсь по A -> B, и когда я возвращаюсь к A, а затем A -> MainActivity, щелкнув назад, нажмите, чтобы показать белый экран на этом трипактивности. и не собираюсь приступать к основной деятельности..
class TripActivity : AppCompatActivity() {
private var currentFragment: Fragment? = null
private var _binding: ActivityTripBinding? = null
private val binding get() = _binding!!
lateinit var editTripFragment: EditTripFragment
lateinit var expenseFragment: ExpenseFragment
lateinit var tripDetailFragment: TripDetailFragment
lateinit var currentTrip: TripTable
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
_binding = ActivityTripBinding.inflate(layoutInflater)
setContentView(binding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
editTripFragment = EditTripFragment()
expenseFragment = ExpenseFragment()
tripDetailFragment = TripDetailFragment()
val receivedBundle = intent.extras
currentTrip = receivedBundle?.getParcelable(Constants.ARG_SELECTED_TRIP)!!
if (savedInstanceState == null) {
replaceFragment(tripDetailFragment)
currentFragment = tripDetailFragment
} else {
currentFragment = supportFragmentManager.findFragmentById(R.id.fragContainer)
}
currentFragment?.let {
binding.bottomNavigation.selectedItemId = it.id
}
setupBottomNavigationBar()
}
override fun onResume() {
super.onResume()
// binding.bottomNavigation.selectedItemId == currentFragment?.id
}
private fun setupBottomNavigationBar() {
binding.bottomNavigation.setOnItemSelectedListener { item ->
val newFragment = when (item.itemId) {
R.id.expense -> expenseFragment
R.id.editTrip -> editTripFragment
R.id.delete -> {
AlertDialogHelper.showAlertDialog(
this,
"Delete TRIP?",
R.drawable.bin,
"DELETE",
"CANCEL",
{
Toast.makeText(this, "Positive Button Clicked", Toast.LENGTH_SHORT)
.show()
},
{
replaceFragment(tripDetailFragment)
}
)
currentFragment
}
else -> tripDetailFragment
}
if (newFragment != currentFragment) {
replaceFragment(newFragment as Fragment)
currentFragment = newFragment
if (newFragment != tripDetailFragment) {
binding.bottomNavigation.visibility = View.GONE
}
Log.d("current frag", currentFragment.toString())
}
true
}
}
private fun replaceFragment(fragment: Fragment) {
if (fragment == tripDetailFragment) {
binding.bottomNavigation.visibility = View.VISIBLE
}
val bundle = Bundle().apply {
putParcelable(Constants.ARG_SELECTED_TRIP, currentTrip)
}
fragment.arguments = bundle
val transaction = supportFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.right_to_left, R.anim.left_to_right)
transaction.replace(R.id.fragContainer, fragment)
transaction.addToBackStack(null)
transaction.commit()
}
override fun onBackPressed() {
if (currentFragment == tripDetailFragment) {
finish()
} else {
super.onBackPressed()
}
}```
класс TripDetailFragment: Fragment() {
private var _binding: FragmentTripDetailBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val onBackPressedCallback = object : OnBackPressedCallback(true ) {
override fun handleOnBackPressed() {
navigateBack()
}
}
requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentTripDetailBinding.inflate(layoutInflater)
return binding.root
}
private fun navigateBack() {
parentFragmentManager.popBackStack()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
класс EditTripFragment: Fragment() {
private var _binding: FragmentEditTripBinding? = null
private val binding get() = _binding!!
private lateinit var startDate: String
private lateinit var endDate: String
private var _toolbarBinding: ToolBarBinding? = null
private val toolbarBinding get() = _toolbarBinding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requireActivity().onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
showDiscard()
}
})
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentEditTripBinding.inflate(layoutInflater)
_toolbarBinding = ToolBarBinding.bind(binding.toolbar.root)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val trip:TripTable? = arguments?.getParcelable(Constants.ARG_SELECTED_TRIP)
setTripData(trip)
// toolbarBinding.toolbar.title = "Edit Trip"
toolbarBinding.title.text="Edit Trip"
toolbarBinding.icon.setOnClickListener {
showDiscard()
}
}
private fun setTripData(trip: TripTable?) {
if (trip != null) {
val date="${trip.startDate} - ${trip.endDate}"
binding.tripName.text=trip.tripName.toEditable()
binding.tripLocation.text=trip.tripLocation.toEditable()
binding.selectedDate.visibility=View.VISIBLE
binding.selectedCurr.visibility=View.VISIBLE
binding.selectedCurr.text=trip.currency
binding.selectedDate.text=date.toString()
} else {
Log.e("error in edit trip", error("some error occurred"))
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
_toolbarBinding = null
}
fun showDiscard():Boolean{
AlertDialogHelper.showAlertDialog(
requireActivity(),
"Discard Changes?",
R.drawable.bin,
"DISCARD",
"",
{
parentFragmentManager.popBackStack()
},
{
}
)
return false
}
// Extension function to convert String to Editable
private fun String.toEditable(): Editable = Editable.Factory.getInstance().newEditable(this)
here i want that when i press back from edittrip it comes to detailtrip and then backpress it goes to mainactivity .
MainActivity --> tripActivity( detail-->edittrip-->deatil-->)-->mainActivity
Подробнее здесь: https://stackoverflow.com/questions/781 ... ite-screen
Backstack Android показывает белый экран ⇐ Android
Форум для тех, кто программирует под Android
1710839454
Гость
В моем приложении есть основное действие, когда я перехожу от основного действия к трипактивности
а в трипактивности есть нижняя навигация и три фрагмента, в которых я блокирую один фрагмент по умолчанию и два фрагмента с помощью нижних щелчков. p>
здесь предположим, что основным фрагментом является A, и я перемещаюсь по A -> B, и когда я возвращаюсь к A, а затем A -> MainActivity, щелкнув назад, нажмите, чтобы показать белый экран на этом трипактивности. и не собираюсь приступать к основной деятельности..
class TripActivity : AppCompatActivity() {
private var currentFragment: Fragment? = null
private var _binding: ActivityTripBinding? = null
private val binding get() = _binding!!
lateinit var editTripFragment: EditTripFragment
lateinit var expenseFragment: ExpenseFragment
lateinit var tripDetailFragment: TripDetailFragment
lateinit var currentTrip: TripTable
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
_binding = ActivityTripBinding.inflate(layoutInflater)
setContentView(binding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
editTripFragment = EditTripFragment()
expenseFragment = ExpenseFragment()
tripDetailFragment = TripDetailFragment()
val receivedBundle = intent.extras
currentTrip = receivedBundle?.getParcelable(Constants.ARG_SELECTED_TRIP)!!
if (savedInstanceState == null) {
replaceFragment(tripDetailFragment)
currentFragment = tripDetailFragment
} else {
currentFragment = supportFragmentManager.findFragmentById(R.id.fragContainer)
}
currentFragment?.let {
binding.bottomNavigation.selectedItemId = it.id
}
setupBottomNavigationBar()
}
override fun onResume() {
super.onResume()
// binding.bottomNavigation.selectedItemId == currentFragment?.id
}
private fun setupBottomNavigationBar() {
binding.bottomNavigation.setOnItemSelectedListener { item ->
val newFragment = when (item.itemId) {
R.id.expense -> expenseFragment
R.id.editTrip -> editTripFragment
R.id.delete -> {
AlertDialogHelper.showAlertDialog(
this,
"Delete TRIP?",
R.drawable.bin,
"DELETE",
"CANCEL",
{
Toast.makeText(this, "Positive Button Clicked", Toast.LENGTH_SHORT)
.show()
},
{
replaceFragment(tripDetailFragment)
}
)
currentFragment
}
else -> tripDetailFragment
}
if (newFragment != currentFragment) {
replaceFragment(newFragment as Fragment)
currentFragment = newFragment
if (newFragment != tripDetailFragment) {
binding.bottomNavigation.visibility = View.GONE
}
Log.d("current frag", currentFragment.toString())
}
true
}
}
private fun replaceFragment(fragment: Fragment) {
if (fragment == tripDetailFragment) {
binding.bottomNavigation.visibility = View.VISIBLE
}
val bundle = Bundle().apply {
putParcelable(Constants.ARG_SELECTED_TRIP, currentTrip)
}
fragment.arguments = bundle
val transaction = supportFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.right_to_left, R.anim.left_to_right)
transaction.replace(R.id.fragContainer, fragment)
transaction.addToBackStack(null)
transaction.commit()
}
override fun onBackPressed() {
if (currentFragment == tripDetailFragment) {
finish()
} else {
super.onBackPressed()
}
}```
класс TripDetailFragment: Fragment() {
private var _binding: FragmentTripDetailBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val onBackPressedCallback = object : OnBackPressedCallback(true ) {
override fun handleOnBackPressed() {
navigateBack()
}
}
requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentTripDetailBinding.inflate(layoutInflater)
return binding.root
}
private fun navigateBack() {
parentFragmentManager.popBackStack()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
класс EditTripFragment: Fragment() {
private var _binding: FragmentEditTripBinding? = null
private val binding get() = _binding!!
private lateinit var startDate: String
private lateinit var endDate: String
private var _toolbarBinding: ToolBarBinding? = null
private val toolbarBinding get() = _toolbarBinding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requireActivity().onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
showDiscard()
}
})
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentEditTripBinding.inflate(layoutInflater)
_toolbarBinding = ToolBarBinding.bind(binding.toolbar.root)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val trip:TripTable? = arguments?.getParcelable(Constants.ARG_SELECTED_TRIP)
setTripData(trip)
// toolbarBinding.toolbar.title = "Edit Trip"
toolbarBinding.title.text="Edit Trip"
toolbarBinding.icon.setOnClickListener {
showDiscard()
}
}
private fun setTripData(trip: TripTable?) {
if (trip != null) {
val date="${trip.startDate} - ${trip.endDate}"
binding.tripName.text=trip.tripName.toEditable()
binding.tripLocation.text=trip.tripLocation.toEditable()
binding.selectedDate.visibility=View.VISIBLE
binding.selectedCurr.visibility=View.VISIBLE
binding.selectedCurr.text=trip.currency
binding.selectedDate.text=date.toString()
} else {
Log.e("error in edit trip", error("some error occurred"))
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
_toolbarBinding = null
}
fun showDiscard():Boolean{
AlertDialogHelper.showAlertDialog(
requireActivity(),
"Discard Changes?",
R.drawable.bin,
"DISCARD",
"",
{
parentFragmentManager.popBackStack()
},
{
}
)
return false
}
// Extension function to convert String to Editable
private fun String.toEditable(): Editable = Editable.Factory.getInstance().newEditable(this)
here i want that when i press back from edittrip it comes to detailtrip and then backpress it goes to mainactivity .
MainActivity --> tripActivity( detail-->edittrip-->deatil-->)-->mainActivity
Подробнее здесь: [url]https://stackoverflow.com/questions/78185368/andorid-backstack-showing-white-screen[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия