Dheeraj
¿Cómo puedo acceder a los valores desde el Android? cadenas.xml usando kotlin?
class MainActivity : AppCompatActivity(), View.OnClickListener {
override fun onClick(p0: View?) {
getToastCalled("")
TODO("not implemented")
}
private fun getToastCalled(message: String) {
TODO("not implemented")
}
var btn: Button? = null;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var tv_name=findViewById(R.id.tv) as TextView
btn=findViewById(R.id.button) as Button
tv_name.setText(KtTest().name);
(btn as Button).setOnClickListener(MainActivity@this)
}
}
Robin
Acceder a valores de cadena en Kotlin funciona exactamente igual que en Java, solo con la sintaxis de Kotlin:
val string: String = getString(R.string.your_string_id)
(Esto supone que su código está dentro de un Android Activity
o una clase similar que hereda de Context
. Si no, necesita obtener un Context
instancia desde algún lugar, y cámbielo a myContext.getString(...)
.)
-
Esto podría producir nulo
– Igor Ganapolski
23 oct 2018 a las 17:34
-
@IgorGanapolsky Bueno, sí, técnicamente podría, pero eso es un error de programación o algo está mal con el proceso de compilación si lo hace. Esta llamada que devuelve nulo no es algo de lo que pueda recuperarse de manera significativa, por lo que en Java, nulo nunca se verifica aquí, y afortunadamente tampoco es necesario en Kotlin.
– Robin
23 oct 2018 a las 20:12
-
Traté de usar esta función, Android Studio ni siquiera pudo encontrarla
– Baya de serbal
6 de abril de 2020 a las 2:31
-
@Serba
getString
se define enContext
. Mi código de ejemplo fue escrito asumiendo que estás dentro de un AndroidActivity
que hereda deContext
pero si lo necesita en otro lugar, necesita tener unContext
disponible en alguna parte. Necesitas cambiar el ejemplo amyContext.getString(...)
en ese caso. (Descargo de responsabilidad: no he desarrollado Android durante mucho tiempo, es posible que los detalles hayan cambiado)– Robin
6 de abril de 2020 a las 13:32
-
@Robin, sí, me di cuenta después de escribir mi comentario, estaba tratando de hacerlo en una clase de objeto, simplemente no se indicó explícitamente
– Baya de serbal
7 de abril de 2020 a las 0:34
Prat137
si está accediendo fuera de oncreate, entonces
Resources.getSystem().getString(R.string.btn_yes)
Dhivysh
Si necesita acceder a toda la matriz:
val data= resources.getStringArray(R.array.array_id)
Si ayuda, así es como lo hice: necesita el contexto de la aplicación y también para importar la Clase R
applicationContext.getString(R.string.text_string)
import com.example.yourpackagename.R
Para usar strings.xml en mi código, hago lo siguiente:
textView.text = "${getString(R.string.my_text)}"
Ola Ström
La respuesta de @Robin casi funcionó para mí, pero si no agrego this.resources
antes de getString(R.string.tv)
mi aplicación sigue fallando.
Entonces, para acceder a un valor de cadena desde dentro del cadenas.xml presentar en kotlin usar:
this.resources.getString(R.string.tv)
O simplemente:
resources.getString(R.string.tv)
zaerymoghaddam
Utilice el formato – R.string.string_name
Menciónelo explícitamente, por ejemplo:
R.string.loadingText,
Dado que su archivo XML tiene lo siguiente como parte de los recursos:
<string name="loadingText">The actual text to be displayed</string>
-
¿Esto no devuelve la identificación entera de esa cadena XML, en lugar del contenido de la cadena en sí?
– Marios Yiannakou
12 de julio de 2021 a las 14:20
Al igual que en Java.
– nhaarman
2 de julio de 2017 a las 13:59
Ya ha hecho referencia a diseños e identificadores en su ejemplo. También tenga en cuenta que puede convertir archivos java a kotlin usando ctrl + shift + alt + k. También hay una extensa documentación sobre los métodos disponibles en kotl.in
– Alan W.
3 de julio de 2017 a las 1:54
muchas gracias por la ayuda..
– Dheeraj
24/09/2017 a las 15:34