У меня есть один пользовательский фрагмент, Фрагмент A и два пользовательских действия, Упражнение A и Упражнение B. У меня есть кнопка на каждом из них в верхнем левом углу, которая при нажатии должна go вернуться к предыдущему фрагменту или заданию , Я переключаюсь с фрагмента A на действие A, используя вызов intent(...)
, и то же самое при переходе от действия A к действию B. Я переключаюсь с действия B на занятие A с помощью вызова intent(...)
, но не могу переключиться с действия A на фрагмент А используя intent(...)
вызов. Я попытался использовать finish()
в Деятельности A, чтобы вернуться к Фрагменту A, но иногда это приводит к отображению Деятельности B, если я ранее посещал его, прежде чем пытаться переключиться на Фрагмент A. Любая помощь в решении этой головоломки будет принята с благодарностью.
Вот код для фрагмента A:
package com.riverstonetech.gositeuk.ui.scotland
import android.content.Intent
import android.content.Intent.getIntent
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ProgressBar
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import com.google.firebase.firestore.FirebaseFirestore
import com.riverstonetech.gositeuk.CountriesActivity
import com.riverstonetech.gositeuk.R
import com.riverstonetech.gositeuk.RegionActivity
import com.riverstonetech.gositeuk.returnToFragment
import kotlinx.android.synthetic.main.fragment_scotland.*
class ScotlandFragment : Fragment() {
// Access a Cloud Firestore instance
val db = FirebaseFirestore.getInstance()
lateinit var adapter : ArrayAdapter<String>
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val fragmentTransaction = returnToFragment.fragmentManager.beginTransaction()
fragmentTransaction.add(R.id.navigation_scotland, this)
fragmentTransaction.addToBackStack("ScotlandFragment")
fragmentTransaction.commit()
val root = inflater.inflate(R.layout.fragment_scotland, container, false)
(requireActivity() as CountriesActivity).initializeCustomActionBar(R.drawable.scotland_flag, R.string.title_regions)
var regions : ArrayList<String>
val docRef = db.collection("UKSites").document("Scotland")
val progressBar: ProgressBar = root.findViewById(R.id.regionsLoadingProgressBar)
docRef.get()
.addOnSuccessListener { document ->
progressBar?.visibility = ProgressBar.VISIBLE
if (document != null) {
regions = document.get("Regions") as ArrayList<String>
adapter = ArrayAdapter(requireContext(), R.layout.list_item, regions)
regionsListView.adapter = adapter
regionsListView.setOnItemClickListener { parent, view, position, id ->
val intent = Intent(activity!!, RegionActivity::class.java)
intent.putExtra("SUB_COUNTRY", regions[position])
startActivity(intent)
}
progressBar?.visibility = ProgressBar.GONE
} else {
Log.d("Debug", "No such document")
}
}
.addOnFailureListener { exception ->
Log.d("Debug", "get failed with ", exception)
}
return root
}
}
Вот соответствующий код для упражнения A:
fun previousSubCountryListButtonClicked(view: View) {
if ( returnToFragment.fragmentManager.backStackEntryCount > 0) {
returnToFragment.fragmentManager.popBackStack()
}
}
Вот соответствующий код для моего упражнения B :
fun listPreviousSitesClicked(view: View) {
var intent: Intent
when (previousActivityName) {
"CountyActivity" -> {
intent = Intent(this, CountyActivity::class.java)
intent.putExtra("SUB_COUNTRY", subCountry)
startActivity(intent)
}
"RegionActivity" -> {
intent = Intent(this, RegionActivity::class.java)
intent.putExtra("SUB_COUNTRY", subCountry)
startActivity(intent)
}
else -> Log.i("INFO", "Unknown activity")
}
}
Вот код моего объекта returnToFragment
package com.riverstonetech.gositeuk
import androidx.fragment.app.FragmentActivity
object returnToFragment: FragmentActivity() {
var fragmentManager = supportFragmentManager
}