Обновлено - код в вопросе теперь работает
Я пытаюсь запустить функцию после нажатия на кнопку. Функция обновляет массив, и я хочу запустить следующие строки (Следующие строки переносят меня в другое действие), если массив не пустой.
Я пытался открыть новое действие в функции filterPlaces
, но безуспешно, startActivity
и Intent
не работают.
Это функция, которая обновляет массив:
var places = ArrayList<Place>() //Global place array
class MainActivity : AppCompatActivity() {
fun filterPlaces(types: ArrayList<String>, foods: ArrayList<String>, maxPrice: Int, maxProximity: Int) {
var typesList = types
val foodList = foods
if (types.isEmpty()) {
typesList = arrayListOf("Restaurant", "Hangouts")
if (foods.isEmpty()) {
foodList.add("Pizza")
}
}
val db = FirebaseFirestore.getInstance()
db.collection("places").get().addOnSuccessListener { result ->
for (document in result) {
val typeMatches = document.data["Type"].toString() in typesList
val foodMatches = document.data["Food"].toString() in foodList
var price = 0
when (document.data["Price"].toString()) {
"Very cheap" -> price = 0
"Cheap" -> price = 1
"Average" -> price = 2
"Far" -> price = 3
"Very far" -> price = 4
}
val priceMatches = price <= maxPrice
var proximity = 0
when (document.data["Proximity"].toString()) {
"Very close" -> proximity = 0
"Close" -> proximity = 1
"Far" -> proximity = 2
"Very far" -> proximity = 3
}
val proximityMatches = proximity <= maxProximity
if (typeMatches and foodMatches and priceMatches and proximityMatches) {
val place = Place(
document.data["Place"].toString(),
document.data["Type"].toString(),
document.data["Food"].toString(),
document.data["Price"].toString(),
document.data["Proximity"].toString()
)
places.add(place)
Log.d("name", "Place added successfully")
}
}
//Openning the results activity
if (places.isNotEmpty()) {
val i = Intent(this, RelevantPlaces::class.java)
val b = Bundle()
b.putParcelableArrayList("places", places)
i.putExtra("bundle", b)
startActivity(i)
}
}
.addOnFailureListener { exception ->
Log.d("name", "Error getting documents.")
}
}
Это функция нажатия:
fun onSortFilterClicked(view: View) {
if (places.isEmpty()) filterPlaces(types, foods, priceRange.progress, proximityRange.progress)
}
Сначала я хочу запустить filterPlaces
, обновлять массив places
, пока я его запускаю, и только потом проверять, является ли массив все еще пустым, и если нет, открыть новое действие.
На самом деле происходит то, что он вызывает filterPlaces
, но не делает этого, вместо этого он проверяет массив places
(if condition
в коде) и только затем входит в filterPlaces
и запускает то, что в нем, у меня нужно дважды нажать на кнопку и только у массива есть значения.
Я запускаю это на Android Studio, и я новичок в этом мире Kotlin и разработке Android в целом.
Есть ли решение для этого? Либо открыть действие внутри функции, либо запустить ее сначала?