Kotlin,Android Studio:我无法让我的程序使用第二个适配器。列表视图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin,Android Studio:我无法让我的程序使用第二个适配器。列表视图相关的知识,希望对你有一定的参考价值。
我刚开始使用android Studio在Kotlin上编程,而我目前正在使用列表视图开发一些问题。
我目前正在关注this tutorial,并且进行了一些更改,设法使它适用于我的程序,即使它的重点是从JSON文件中获取数据,而我是从Firestore中获取它。
我从Firestore数据库中读取了我的数据。首先,我阅读了该清单,以列出我所在地区的餐馆(文件)清单,对此我没有任何问题。但是,一旦我尝试根据这些餐厅(文档)的数据创建另一个列表,例如菜单上的产品类别(饮料,沙拉,汉堡等),我将无法在屏幕上显示任何内容,即使我在这个新类上使用完全相同的方法和适配器。
这是我在第一堂课中使用的代码,在该代码中可以正确显示列表:
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.ListView
import androidx.appcompat.app.AppCompatActivity
import com.al.tfmteleco.utiles.AdaptadorListaEstablecimientos
import com.google.firebase.firestore.FirebaseFirestore
val db = FirebaseFirestore.getInstance()
class Explorar : AppCompatActivity()
lateinit var listView: ListView
private val establecimientosList = ArrayList<ModelEstablecimientos>()
private var establecimiento: ModelEstablecimientos? = null
private var IDEstablecimiento: Int? = null
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_explorar)
listView = findViewById<ListView>(R.id.listaEstablecimientos)
// 1
getEstablecimientos()
listView.setOnItemClickListener_,_,position,_ ->
finish()
establecimiento = establecimientosList[position]
IDEstablecimiento = establecimiento!!.ID
println("La ID es: $IDEstablecimiento")
val intent = Intent(this@Explorar, Establecimiento::class.java)
intent.putExtra("establecimientoID", IDEstablecimiento.toString())
startActivity(intent)
private fun getEstablecimientos()
db.collection("establecimientos")
.get()
.addOnSuccessListener result ->
for (document in result)
establecimientosList.add(
ModelEstablecimientos(
document.getString("Nombre"),
document.getString("Categoria1"),
document.getString("Categoria2"),
document.getString("Categoria3"),
document.getString("Precio"),
document.getString("Localizacion"),
document.getLong("MesasDisponibles")?.toInt(),
document.getLong("MesasOcupadas")?.toInt(),
document.getLong("Abierto")?.toInt(),
document.getLong("PuntosOpiniones")?.toFloat(),
document.getLong("OpinionesTotales")?.toInt(),
document.id.toInt()
)
)
Log.d("Documentos", "$document.id => $document.data")
// 2
val listItems = arrayOfNulls<String>(establecimientosList.size)
// 3
for (i in 0 until establecimientosList.size)
val establecimiento = establecimientosList[i]
listItems[i] = establecimiento.nombre
// 4
val adapter =
AdaptadorListaEstablecimientos(
this,
establecimientosList
)
listView.adapter = adapter
.addOnFailureListener exception ->
Log.d("Documentos", "Error getting documents: ", exception)
这是来自该列表的适配器类的。
import android.content.Context
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import com.al.tfmteleco.ModelEstablecimientos
import com.al.tfmteleco.R
class AdaptadorListaEstablecimientos(private val context: Context,
private val dataSource: ArrayList<ModelEstablecimientos>) : BaseAdapter()
private val inflater: LayoutInflater
= context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
//1
override fun getCount(): Int
return dataSource.size
//2
override fun getItem(position: Int): Any
return dataSource[position]
//3
override fun getItemId(position: Int): Long
return position.toLong()
//4
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View
// Get view for row item
val rowView = inflater.inflate(R.layout.lista_establecimientos, parent, false)
// Get title element
val nombreTextView = rowView.findViewById(R.id.nombreEstablecimiento) as TextView
// Get cat1 element
val cat1TextView = rowView.findViewById(R.id.cat1Establecimiento) as TextView
// Get cat1 element
val cat2TextView = rowView.findViewById(R.id.cat2Establecimiento) as TextView
// Get cat1 element
val cat3TextView = rowView.findViewById(R.id.cat3Establecimiento) as TextView
// Get rangoprecio element
//val rangoprecioTextView = rowView.findViewById(R.id.precioEstablecimiento) as TextView
// Get mapa element
val mapaButton = rowView.findViewById(R.id.mapaEstablecimiento) as ImageView
// Get mesas element
val mesasTextView = rowView.findViewById(R.id.mesasEstablecimiento) as TextView
// Get mensaje element
val mensajeTextView = rowView.findViewById(R.id.mensajeEstablecimiento) as TextView
// Get info element
val infoButton = rowView.findViewById(R.id.infoEstablecimiento) as ImageView
// Get points element
val ptsTextView = rowView.findViewById(R.id.ptsOpinion) as TextView
val ratingBarView = rowView.findViewById(R.id.ratingBar) as RatingBar
// 1
val listaEstablecimientos = getItem(position) as ModelEstablecimientos
// 2
nombreTextView.text = listaEstablecimientos.nombre // NOMBRE DEL ESTABLECIMIENTO
cat1TextView.text = listaEstablecimientos.cat1 // CATEGORIA 1 DEL ESTABLECIMIENTO
cat2TextView.text = listaEstablecimientos.cat2 // CATEGORIA 2 DEL ESTABLECIMIENTO
cat3TextView.text = listaEstablecimientos.cat3 // CATEGORIA 3 DEL ESTABLECIMIENTO
// LOCALIZACIÓN DEL ESTABLECIMIENTO
if(listaEstablecimientos.loc == null)
mapaButton.visibility = View.INVISIBLE
else
mapaButton.visibility = View.VISIBLE
// MESAS DISPONIBLES DEL ESTABLECIMIENTO
mesasTextView.text = listaEstablecimientos.mesasOcupadas.toString() +
"/" +
listaEstablecimientos.mesasDisponibles.toString() + " mesas ocupadas"
var mesasO : Float = listaEstablecimientos.mesasOcupadas!!.toFloat()
var mesasD : Float = listaEstablecimientos.mesasDisponibles!!.toFloat()
if (mesasO/mesasD <= 0.2)
mesasTextView.setTextColor(Color.parseColor("#2D6E30"))
else if (mesasO/mesasD <= 0.6)
mesasTextView.setTextColor(Color.parseColor("#D14F00"))
else if (mesasO/mesasD >= 0.85)
mesasTextView.setTextColor(Color.parseColor("#8A0000"))
// ESTADO DEL ESTABLECIMIENTO
if(listaEstablecimientos.mensaje == 0)
mensajeTextView.text = "Cerrado"
mensajeTextView.setTextColor(Color.parseColor("#8A0000"))
else if(listaEstablecimientos.mensaje == 1)
mensajeTextView.text = "Abierto"
mensajeTextView.setTextColor(Color.parseColor("#2D6E30"))
// PUNTUACIÓN DEL LOCAL POR PARTE DE LOS USUARios
var puntos : Float = listaEstablecimientos.puntos!!.toFloat()
var opiniones : Float = listaEstablecimientos.opiniones!!.toFloat()
// Formato para mostrar el número con un solo decimal
var pts= "%.$1f".format(puntos/opiniones).toFloat()
ptsTextView.text = pts.toString()
ratingBarView.rating = pts
// Si la posición del establecimiento en la lista es par, el fondo es algo más oscuro
if(position % 2 == 0)
rowView.setBackgroundColor(Color.parseColor("#E8E8E8"))
return rowView
“很好,如果可以的话,那就试着去适应它”-我想。我尝试过,它应该更简单,因为我只需要使用标准列表模式,列表中只有一个项目(类别名称)即可。由于某种原因,它不起作用。它似乎可以很好地读取数据,但似乎无法适应另一个列表。
这是我正在使用的代码,在其中发现麻烦:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ArrayAdapter
import android.widget.ListView
class Categorias : AppCompatActivity()
private lateinit var listViewCategorias: ListView
private val categoriasList = ArrayList<ModelCategorias>()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_categorias)
listViewCategorias = findViewById(R.id.listaCategorias)
val establecimientoID=intent.getStringExtra("establecimientoID")
println(establecimientoID)
getCategorias(establecimientoID.toInt())
setContentView(R.layout.activity_categorias)
private fun getCategorias(ID:Int)
db.collection("establecimientos").document(ID.toString()).collection("categorias")
.get()
.addOnSuccessListener result ->
for (document in result)
categoriasList.add(
ModelCategorias(
document.getString("Nombre_Categoria"),
document.id.toInt()
)
)
Log.d("Categorias", "$document.id => $document.data")
// 2
val listItems = arrayOfNulls<String>(categoriasList.size)
// 3
for (i in 0 until categoriasList.size)
val categoria = categoriasList[i]
listItems[i] = categoria.nombreCategoria.toString()
println(listItems[i].toString())
val adapter = ArrayAdapter(this,android.R.layout.simple_list_item_1, listItems)
listViewCategorias.adapter = adapter
.addOnFailureListener exception ->
Log.d("Documentos", "Error getting documents: ", exception)
很抱歉,我发布了这么长的第一篇文章,但我非常绝望。也请原谅我的英语生锈。
先谢谢您。
活动所在的活动:
val适配器= AdaptadorListaEstablecimientos(this,establecimientosList)
无法使用的活动:
val适配器= ArrayAdapter(this,android.R.layout.simple_list_item_1,listItems)
如果ArrayAdapter和AdaptadorListaEstablecimientos基本上是同一适配器,则它不需要额外的属性(在这种情况下,为android.R.layout.simple_list_item_1)。您应该进一步研究适配器之间的差异。
以上是关于Kotlin,Android Studio:我无法让我的程序使用第二个适配器。列表视图的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin,Android Studio:我无法让我的程序使用第二个适配器。列表视图
Kotlin,Android Studio:我无法让我的程序使用第二个适配器。列表视图
在 Kotlin/Android Studio 中无法将 mp3 转换为 pcm - UnsupportedAudioFileException
如何使用 kotlin 在 android studio 中引用 timerPicker