android - 在我的 Android 应用中的活动之间切换后,如何切换回上一个片段?
问题描述
我有一个自定义片段,片段 A 和两个自定义活动,活动 A 和活动 B。我在左上角的每个按钮上都有一个按钮,单击该按钮应返回到上一个片段或活动。我使用调用从 Fragment Aintent(...)
切换到 Activity A,从 Activity A 切换到 Activity B 时也是如此。我通过调用从 Activity B 切换到 Activity A,intent(...)
但我无法使用调用intent(...)
从Activity A 切换到 Fragment A。我曾尝试finish()
在 Activity A 中使用以返回 Fragment A,但如果我在尝试切换到 Fragment A 之前曾访问过它,有时会导致显示 Activity B。对于解决此难题的任何帮助将不胜感激。
这是片段 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
}
解决方案
您正在从Fragment A
使用Activity A
意图功能切换。
Activity A
从到前进时,您正在做同样的事情Activity B
。
当你回去的时候,完成Activity B
然后完成Activity A
。Fragment A
然后将对用户可见。
不要通过调用意图方法返回,只需使用完成。
推荐阅读
- java - 从服务更新 textView 的最简单方法是什么?
- java - Spring Boot - Mongo | 保存大量对象给出重复键错误
- css - 溢出-y的约束:滚动
- amazon-web-services - Dynamo DB 查询和扫描行为问题
- html - 如何生成 CSS3 形状
- python - 在 pandas 上选择一列(来自时间戳的 datetime.date 的结果)
- ios - 更改 .xcarchive 上的签名团队
- php - 如何以最简单的方式将键和值添加到数组
- python - keras - tensorflow - LSTM - csv - 如何使用 fit_generator
- asp.net - 从网站转换为 Web 应用程序后,Syste.Web.Ui.Page 为“未定义”