Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android应用程序中切换活动后,如何切换回上一个片段?_Android_Kotlin_Android Activity_Fragment - Fatal编程技术网

在Android应用程序中切换活动后,如何切换回上一个片段?

在Android应用程序中切换活动后,如何切换回上一个片段?,android,kotlin,android-activity,fragment,Android,Kotlin,Android Activity,Fragment,我有一个自定义片段,片段A和两个自定义活动,活动A和活动B。我在左上角的每个活动上都有一个按钮,单击该按钮应返回到上一个片段或活动。我使用一个intent…调用从片段A切换到活动A,当我从活动A切换到活动B时,我使用intent…调用从活动B切换到活动A。。。调用,但我无法使用意图…调用从活动A切换到片段A。我曾尝试在活动A中使用finish返回片段A,但如果我在尝试切换到片段A之前访问过活动B,则有时会显示活动B。如果您能帮助我解决此难题,我们将不胜感激 以下是片段A的代码: package

我有一个自定义片段,片段A和两个自定义活动,活动A和活动B。我在左上角的每个活动上都有一个按钮,单击该按钮应返回到上一个片段或活动。我使用一个intent…调用从片段A切换到活动A,当我从活动A切换到活动B时,我使用intent…调用从活动B切换到活动A。。。调用,但我无法使用意图…调用从活动A切换到片段A。我曾尝试在活动A中使用finish返回片段A,但如果我在尝试切换到片段A之前访问过活动B,则有时会显示活动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
    }
}
以下是我的活动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的代码

您正在使用intent函数从片段A切换到活动A

从活动A转到活动B时,您也在做同样的事情

当您返回时,先完成活动B,然后完成活动A。然后用户将看到片段A


不要通过调用intent方法返回,只需使用finish

你问的不是很清楚。哪个活动承载您的片段?我想按设置的顺序切换:片段a->活动a->活动B,反之亦然。您不能在活动外部显示片段,所以哪个活动是片段a运行中?片段始终取决于活动,您能解释一下您的片段承载于哪个活动吗@斋月
    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")

        }


    }
package com.riverstonetech.gositeuk

import androidx.fragment.app.FragmentActivity

object returnToFragment: FragmentActivity() {

    var fragmentManager = supportFragmentManager

}