首页 > 解决方案 > 在我的 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

}

标签: androidkotlinandroid-activityfragment

解决方案


您正在从Fragment A使用Activity A意图功能切换。

Activity A从到前进时,您正在做同样的事情Activity B

当你回去的时候,完成Activity B然后完成Activity AFragment A然后将对用户可见。

不要通过调用意图方法返回,只需使用完成。


推荐阅读