Как вернуться к предыдущему фрагменту после переключения между действиями в моем приложении Android? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть один пользовательский фрагмент, Фрагмент 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

}

1 Ответ

1 голос
/ 12 февраля 2020

Вы переключаетесь с Fragment A на Activity A, используя функцию намерения.

вы делаете то же самое, когда переходите от Activity A к Activity B.

Когда ты возвращаешься, фини sh Activity B затем фини sh Activity A. Fragment A будет виден пользователю.

Не go назад, вызвав метод намерения, просто используйте fini sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...