Backstack Android показывает белый экранAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 Backstack Android показывает белый экран

Сообщение Гость »

В моем приложении есть основное действие, когда я перехожу от основного действия к трипактивности
а в трипактивности есть нижняя навигация и три фрагмента, в которых я блокирую один фрагмент по умолчанию и два фрагмента с помощью нижних щелчков. 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»