【发布时间】:2020-02-11 19:31:34
【问题描述】:
我有一个自定义片段,片段 A 和两个自定义活动,活动 A 和活动 B。我在左上角的每个片段上都有一个按钮,单击该按钮应返回到上一个片段或活动。我使用intent(...)call 从 Fragment A 切换到 Activity A,从 Activity A 切换到 Activity B 时也是如此。我使用 intent(...) 调用从 Activity B 切换到 Activity A,但我无法从 Activity A 切换到 Fragment A 使用intent(...)call。我曾尝试在 Activity A 中使用 finish() 返回 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
}
}
这里是Activity 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 B 和相反
-
不能在activity之外展示fragment,那么fragment A在哪个activity中运行?
-
Fragment 总是依赖于 Activity,你能解释一下哪个 Activity 托管你的 Fragment 吗? @sjlearmonth
标签: android kotlin android-activity fragment