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

Я делаю переход от фрагмента к действию, но я не могу перейти к фрагменту без сбоя моего приложения.

Вот мой код фрагмента:

package com.riverstonetech.gositeuk.ui.scotland

import android.content.Intent
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 com.google.firebase.firestore.FirebaseFirestore
import com.riverstonetech.gositeuk.CountriesActivity
import com.riverstonetech.gositeuk.R
import com.riverstonetech.gositeuk.RegionActivity
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 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
    }
}

И вот соответствующий код в моем классе активности RegionActivity:


    fun previousSubCountryListButtonClicked(view: View) {

        val intent: Intent = Intent(this, ScotlandFragment::class.java)
        startActivity(intent)

    }

Вот вывод ошибки в окне logcat:

2020-02-10 15:46:54.089 27008-27008/com.riverstonetech.gositeuk E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.riverstonetech.gositeuk, PID: 27008
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402)

У меня недостаточно знаний о фрагментах и деятельность, чтобы понять, почему это не работает, поэтому любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Я использовал finish() вместо того, чтобы пытаться переключиться на фрагмент с помощью интентов.

0 голосов
/ 11 февраля 2020

Вы делаете этот путь более сложным, чем нужно.

Чтобы вернуться от RegionActivity к предыдущему Activity/Fragment, вам просто нужно позвонить finish(). Это уничтожит RegionActivity и вернется к тому, что Activity было под ним, в том же состоянии, в котором оно было, когда вы запустили RegionActivity.

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